使用Mongoose,如何在不替换现有项目的情况下向对象添加更多项目?
User.findOneAndUpdate(
{ userId: 0 },
{ userObjects: { newItem: value } }
);
上面代码的问题在于它清除之前的任何内容并将其替换为newItem,当我希望它只是向userObjects添加另一个项目时(就像javascript数组的push函数一样)。
答案 0 :(得分:1)
使用点符号指定字段以更新/添加嵌入式文档中的特定字段。
User.findOneAndUpdate(
{ userId: 0 },
{ "userObjects.newerItem": newervalue } }
);
或
User.findOneAndUpdate(
{ userId: 0 },
{ "$set":{"userObjects.newerItem": newervalue } }
);
或使用$ 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
成为一个阵列。