Javascript Mongoose:向现有对象添加更多项

Javascript Mongoose:向现有对象添加更多项,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,使用Mongoose,如何在不替换现有项目的情况下向对象添加更多项目 User.findOneAndUpdate( { userId: 0 }, { userObjects: { newItem: value } } ); 上述代码的问题在于,当我想将另一项添加到userObjects(如javascript数组的push函数)时,它会清除之前存在的内容,并用newItem替换它。根据您的问题,我猜userObjects是一个数组 您可以尝试$push将项目插入数组 User.f

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

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

上述代码的问题在于,当我想将另一项添加到userObjects(如javascript数组的push函数)时,它会清除之前存在的内容,并用newItem替换它。

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

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

 User.findOneAndUpdate(
  { userId: 0 },
  { $push : {"userObjects": { newItem: value } }},
  {safe :true , upsert : true},function(err,model)
  {
      ...
  });
欲了解更多信息,请阅读


希望对你有帮助。如果您提供了模式,我本可以提供更好的帮助。

只需创建名为
UserObjects
的新集合,然后执行类似操作

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

});

无论何时,只要您想从用户处获取这些用户对象,就可以使用Monogoos将其他集合中的相关数据填充到父对象中。如果不是,那么最好的办法就是将
userObjects
设置为数组。

使用点表示法指定要更新/添加嵌入文档中特定字段的字段

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

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

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

您的
userObjects
是数组吗?你能分享你的模式吗?看看我在这篇文章中关于指针的最新答案。这将更新
userObjects.newerItem
中的数据。在本例中,我需要将数据附加到现有对象。像
$post
在数组中使用这是不正确的。请试一试。这将把对象更新为
{“userObjects”:{“newItem”:“value”,“newerItem”:“newvalue”}
-这里的示例-还添加了另一个基于聚合的更新选项,您可以在不需要列出每个键值对的情况下传递对象本身。
User.findOneAndUpdate(
  {"userId":0},
  [{"$set":{
    "userObjects":{
      "$mergeObjects":[
        "$userObjects",
        {"newerItem":"newervalue","newestItem":"newestvalue"}
      ]
    }
  }}]
)