如何使用Mongodb中的子字典更新数组

时间:2016-04-28 11:07:29

标签: node.js mongodb

我想更新数组中的子字典。

我的数组

"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))
              })
            }
        })
     })
    })

但我无法更新数据,请给我任何建议。感谢

1 个答案:

答案 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))
    }
)