Mongoose MongoDB:更新嵌套数组中的对象

2024-05-05

我有以下架构

var UserSchema = new Schema({
  emp_no: Number,
  skills: [{
    skill: {
      type: Schema.Types.ObjectId,
      ref: 'Skill'
    },
    startDate: {type: Date},
  }]
});

然后我尝试更新一项特定技能的开始日期。我尝试了几种不同的方法,其中之一是:

User.findOne({emp_no: req.body.emp_no}, function (err, user) {
    user.update( {'skills._id': 123}, {'$set': {
        'skills.$.startDate': req.body.startDate          
    }}
}

此特定代码给出: err: '无法使用该部分(技能的技能._id)来遍历该元素

实际的物体看起来像

{
"_id" : ObjectId("5469753de27a7c082203fd0a"),
"emp_no" : 123,
"skills" : [ 
    {
        "skill" : ObjectId("547d5f3021d99d302079446d"),
        "startDate" : ISODate("2014-12-02T06:43:27.763Z")
        "_id" : ObjectId("547d5f8f21d99d3020794472")
    }
],
"__v" : 108

}

有什么想法我做错了吗?


你打电话时update http://mongoosejs.com/docs/api.html#document_Document-update在像您在这里所做的模型实例上,第一个参数是应用于该文档的更新操作,因为要更新的文档已经由其唯一标识_id.

相反,使用Model.update http://mongoosejs.com/docs/api.html#model_Model.update只需一次操作即可完成这一切:

User.update(
    {emp_no: req.body.emp_no, 'skills._id': 123}, 
    {'$set': {
        'skills.$.startDate': req.body.startDate          
    }},
    function(err, numAffected) {...}
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoose MongoDB:更新嵌套数组中的对象 的相关文章

随机推荐

  • 无法定义 set 和 get 方法

    尝试使用访问器定义属性时出现错误 这是我的代码 var person Object defineProperty person birthYear value 1997 writable true enumerable true confi
  • Python:使用 FOR 循环插入字典

    我已经在论坛中进行了搜索 但不明白是否可以使用以下构造将新条目插入到我的 Python 字典中 而不将其转换为列表 for x in range 3 pupils dictionary new key input Enter new key
  • Python Shutil.copy 如果我有重复文件,它会复制到新位置吗

    我正在与shutil copypython 中的方法 我找到了下面列出的定义 def copyFile src dest try shutil copy src dest eg src and dest are the same file
  • C/C++ 特殊 CPU 功能的使用

    我很好奇 新的编译器是否使用了新 CPU 中内置的一些额外功能 例如 MMX SSE 3DNow 所以 我的意思是 在最初的 8086 中甚至没有 FPU 所以旧的编译器甚至不能使用它 但新的编译器可以 因为 FPU 是每个新 CPU 的一
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • 在 Qt C++ 中使用多个键

    我正在构建 坦克 游戏 我使用关键事件在地图上运行我的坦克 实际上我当时只能使用一把钥匙 但我需要有能力去完成任务 同时向上和离开 这是我的单键事件代码 switch event gt key case Qt Key Up if ui gt
  • 在主表单之前显示登录表单

    我在表单之间导航时遇到问题 我使用 Delphi XE5 创建了一个 Android Firemonkey 移动应用程序 我目前有一个登录表单和主表单 现在我想要有关如何处理登录表单以显示在主表单之前的建议 在 项目选项 中的表单下 选择要
  • Rails 3:# 的未定义方法“page”

    我无法克服这一点 我知道我读过没有数组的页面方法 但我该怎么办 如果我在控制台中运行 Class all 它会返回 但如果我运行 Class all page 1 则会收到上述错误 有任何想法吗 没有数组没有页面方法 看起来你正在使用kam
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 删除 hive 表中的列

    我正在使用 hive 版本 0 9 我需要删除 hive 表的列 我在几个 hive 命令手册中进行了搜索 但我只找到了 0 14 版本的命令 在 hive 0 9 版本中可以删除 hive 表的一列吗 命令是什么 谢谢 我们不能简单地使用
  • Android 多用户支持(4.2 中的新功能)对服务器端数据模型(例如 android_id)的影响

    Google 刚刚发布了 Android 4 2 其中支持单个设备上的多个用户配置文件 http developer android com about versions android 4 2 html MultipleUsers htt
  • 始终启动没有历史记录的新活动实例

    有没有办法将活动作为没有历史记录的新实例启动 在清单文件中尝试了以下内容 android launchmode singleinstance android noHistory true 我能够实现我所需要的 但是一旦屏幕锁定 就会显示之前
  • SQL 连接表

    表一包含 ID Name 1 Mary 2 John 表二包含 ID Color 1 Red 2 Blue 2 Green 2 Black 我想结束的是 ID Name Red Blue Green Black 1 Mary Y Y 2 J
  • 将 2D 数组中的每一列与另一个 2D 数组中的每一列相乘

    我有两个 Numpy 数组x有形状 m i and y有形状 m j 所以行数是相同的 我想将每一列相乘x每一列y逐元素 使结果具有形状 m i j Example import numpy as np np random seed 1 x
  • SoapHttpClientProtocol:以流而不是字符串的形式获取响应?

    我正在使用一种网络服务 它可以一次性输出大量数据 响应字符串可能约为 8MB 虽然在台式电脑上这不是问题 但嵌入式设备在处理 8MB 字符串对象时会发疯 我想知道是否有办法以流的形式获取响应 目前我正在使用如下方法 我尝试使用 POST 请
  • 从 BLOB 打印 PDF

    我从外部 API 获取 PDF 文件 使用此代码我可以正确下载该文件 var req new XMLHttpRequest req open POST url true req responseType blob req setReques
  • 对话框结果 WPF

    我正在读一本书 上面写着 而不是设置 DialogResult 用户点击后手动 按钮 您可以将按钮指定为 接受按钮 通过设置 是默认为true 点击那个 按钮自动设置 窗口的DialogResult为true 同样 你可以指定一个按钮 作为
  • 如何在 python pandas 中的同一列上进行分组并将唯一值的计数和某些值的计数作为聚合?

    我的问题与我之前的问题有关Question https stackoverflow com questions 42022767 how to do group by and take count of one column divide
  • 使用 std::set 时重载运算符<

    这是我第一次使用 std set 容器 并且我对操作符 std less 遇到了问题 我声明该集合 std set
  • Mongoose MongoDB:更新嵌套数组中的对象

    我有以下架构 var UserSchema new Schema emp no Number skills skill type Schema Types ObjectId ref Skill startDate type Date 然后我