如何在 Mongoose 中更新数组值

新手上路,请多包涵

我想更新一个数组值,但我不确定执行此操作的正确方法,所以我尝试了以下方法但对我没有用。

我的模型,我的模型中的孩子字段

   childrens: {
       type: Array,
       default: ''
  }

我的查询,

    Employeehierarchy.update({ _id: employeeparent._id} ,{ $set: {"$push": { "childrens": employee._id }} })
   .exec(function (err, managerparent) {});

谁能给我帮助。谢谢。

原文由 MMR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

您不能在与嵌套运算符相同的更新表达式中同时使用 $set$push

使用 更新运算符 的正确语法如下:

 {
   <operator1>: { <field1>: <value1>, ... },
   <operator2>: { <field2>: <value2>, ... },
   ...
}

其中 <operator1>, <operator2> 可以来自 此处 指定的任何更新运算符列表。

要向数组添加新元素,单个 $push 运算符就足够了,例如,您可以使用 findByIdAndUpdate 更新方法将修改后的文档返回为

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    { "$push": { "childrens": employee._id } },
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

使用您原来的 update() 方法,语法是

Employeehierarchy.update(
   { "_id": employeeparent._id},
   { "$push": { "childrens": employee._id } },
   function (err, raw) {
       if (err) return handleError(err);
       console.log('The raw response from Mongo was ', raw);
   }
);

其中回调函数接收参数 (err, raw) 其中

  • err 如果发生任何错误
  • raw 是 Mongo 的完整回复

由于您要检查修改后的文档,我建议您使用 findByIdAndUpdate 函数,因为 update() 方法不会给您修改后的文档,只是来自 mongo 的完整写入结果.


如果您想更新文档中的字段并同时将元素添加到数组中,那么您可以这样做

Employeehierarchy.findByIdAndUpdate(employeeparent._id,
    {
        "$set": { "name": "foo" },
        "$push": { "childrens": employee._id }
    }
    { "new": true, "upsert": true },
    function (err, managerparent) {
        if (err) throw err;
        console.log(managerparent);
    }
);

以上将 name 字段更新为“foo”,并将员工 ID 添加到 childrens 数组中。

原文由 chridam 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想这会有所帮助

Employeehierarchy.findOneAndUpdate(
  { _id:employeeparent._id },
  { $set: { "childrens": employee._id }}
)

原文由 Deeksha Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题