当前位置: 首页 > 面试题库 >

如何在Mongoose中更新数组值

朱翔
2023-03-14
问题内容

我想更新一个数组值,但我不确定要执行的正确方法,因此我尝试了以下方法,但没有为我工作。

我的模型,我模型中的子域

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

我的查询

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

谁能给我帮助。谢谢。


问题答案:

你不能同时使用
$set
,并
$push
在相同的更新表达式作为嵌套的运营商。


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

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

在那里<operator1>, <operator2>可以来自任何指定的更新列表运营商的位置。

要将一个新元素添加到数组中,只需一个
$push
运算符即可,例如,您可以使用
findByIdAndUpdate
update方法将修改后的文档返回为

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 是蒙哥的完整回应

由于您要检查修改后的文档,因此建议您使用此
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数组中。



 类似资料:
  • 我有一个highlight模式为:

  • 我已经阅读了尽可能多的关于如何在MongoDB中正确更新数组中的元素的文章(比如这篇:Mongoose,更新对象数组中的值),并认为我已经遵循了所有的建议,但我仍然犯了错误,如果有人能发现我的错误,我将非常感激,因为我已经试着调试了几个小时! 我特别遇到的问题是findOneAndUpdate调用似乎只是更新“inventureItems”数组中的第一个元素,不管它是否匹配我对特定元素的查询。 我

  • 问题内容: 也许是时候了,也许是我淹没在稀疏的文档中,无法将自己的头围在Mongoose中的更新概念上:) 这是交易: 我有一个联系模式和模型(缩短的属性): 我从客户端收到一个包含我需要的字段的请求,并因此使用我的模型: 现在我们解决了这个问题: 如果我打电话,如果使用相同电话号码的联系人已经存在(如预期-唯一),我将收到一条错误消息 我无法致电联系,因为该方法在文档中不存在 如果我对模型调用u

  • 我有这样的代码: 当我这样做邮递员的时候: 我得到以下错误: d:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\lib\schema\obj ectid.js:134抛出新的CastError('objectid',value,this.path);^Error at mongooseerror.casterror(

  • 我有以下架构 我想为创建静态方法,以便根据给定的更新 我的情况与建议的复制相似,但不相同,因为那里的家伙知道所有的,而我不知道。

  • 我试图更新数组中的值,我尝试这样做:Mongoose,更新对象数组中的值 但这似乎对我不起作用: myLessonDB返回此项: 我正在尝试按所示的课程ID更改课程中的值,但它不起作用 没有错误或任何看起来在数组中找不到对象的内容 有人知道我做错了什么吗?