我想更新数组中的子字典。
我的数组
"comments" : [
{
"text" : "hi",
"_id" : ObjectId("56c552dd0a0f08b502a56521"),
"author" : {
"id" : ObjectId("56c54c73f96c51370294f254"),
"photo" : "",
"name" : ""
}
},
{
"text" : "Good",
"_id" : ObjectId("56c5911fc33b446c05a4dabc"),
"author" : {
"id" : ObjectId("56c54be6f96c51370294f123"),
"name" : "xxxx",
"photo":null
}
}
]
我想为此Id author.id更新名称和照片:“56c54be6f96c51370294f123”。
我写了这样的代码:
Event.find({'comments.author.id':_id},(err,event)=>{
_.each(event,function(eventData){
_.each(eventData.comments,function(commentData){
if(commentData.author.id == _id){
var data={'name':username,'photo':photoUrl};
Event.update({'commentData.author.id':_id},
{"$set":{"eventData.comments.author":data}},(err,commentupdate)=>{
console.log("commentupdate:"+JSON.stringify(commentupdate))
})
}
})
})
})
但我无法更新数据,请给我任何建议。感谢
答案 0 :(得分:0)
您可以使用$
positional operator并应用$set
运算符进行更新。 $
positional operator将标识要更新的数组中的正确元素,而不显式指定其位置,因此您的最终更新语句应如下所示:
Event.update(
{ "comments.author.id": _id },
{ "$set": {
"comments.$.author.name": username,
"comments.$.author.photo": photoUrl
}
},
(err, commentupdate)=>{
console.log("commentupdate:" + JSON.stringify(commentupdate))
}
)