猫鼬:向现有对象添加更多项目

时间:2016-11-23 13:58:19

标签: javascript node.js mongodb mongoose

使用Mongoose,如何在不替换现有项目的情况下向对象添加更多项目?

 User.findOneAndUpdate(
  { userId: 0 },
  { userObjects: { newItem: value } }
 );

上面代码的问题在于它清除之前的任何内容并将其替换为newItem,当我希望它只是向userObjects添加另一个项目时(就像javascript数组的push函数一样)。

3 个答案:

答案 0 :(得分:1)

使用点符号指定字段以更新/添加嵌入式文档中的特定字段。

User.findOneAndUpdate(
  { userId: 0 },
  { "userObjects.newerItem": newervalue } }
);

User.findOneAndUpdate(
  { userId: 0 },
  { "$set":{"userObjects.newerItem": newervalue } }
);

enter image description here

或使用$ mergeObjects聚合运算符通过传递新对象来更新现有obj

User.findOneAndUpdate(
  {"userId":0},
  [{"$set":{
    "userObjects":{
      "$mergeObjects":[
        "$userObjects",
        {"newerItem":"newervalue","newestItem":"newestvalue"}
      ]
    }
  }}]
)

答案 1 :(得分:0)

根据你的问题,我猜userObjects是一个数组。

您可以尝试$push将项目插入array

 User.findOneAndUpdate(
  { userId: 0 },
  { $push : {"userObjects": { newItem: value } }},
  {safe :true , upsert : true},function(err,model)
  {
      ...
  });

有关详细信息,请阅读MongoDB $push reference

希望它对你有所帮助。如果您提供了架构,我本可以提供更好的帮助。

答案 2 :(得分:0)

只需创建一个名为UserObjects的新集合,并执行类似的操作。

UserObject.Insert({ userId: 0, newItem: value }, function(err,newObject){

});

每当您想要从用户那里获取这些用户对象时,您就可以使用monogoose的query population来填充父对象以及其他集合中的相关数据。如果没有,那么最好的办法就是让userObjects成为一个阵列。