查找并更新subdoc mongoose数组中的一个字段

时间:2016-04-14 05:49:30

标签: node.js mongodb mongoose

我是mongodb和mongoose的新人。我正在使用节点js,我想在子文档中的一个数组中查找和更新特定字段。 这是我的数据结构:

var PostSchema = new Schema({
title: String,
comment: [
  {
    name: String,
    value: String
  }
],
createdAt: Date,
updateAt: Date
})

这是我的数据示例:

{ 
   _id : 12,
   title : 'some article here...',
   comment : [{
                _id : 1,
                name : 'joe',
                value : 'wow that fantastic...'
             },{
                _id : 2,
                name : 'rocky',
                value : 'really... thats insane...'                    
             },{
                _id : 3,
                name : 'jane',
                value : 'i think its impossible to do...'                  
             }],
   createdAt : 2016-04-14 04:50:54.760Z,
   updatedAt : 2016-04-14 04:50:54.760Z
}

我需要更新有_id的评论:2,我想更改值变为什么???'。我尝试更新:

Post.findOne({'_id': 12, 'comment._id': 2}, {_id: 0, 'comment.$': 1}, function (err, cb) {
  cb.comment.value = 'what???'
  cb.save()
})

但它失败了......所以,你能帮助我吗?感谢

1 个答案:

答案 0 :(得分:2)

您可以使用findOneAndUpdate和位置操作符$来更新特定评论值

Post.findOneAndUpdate({"_id": 12, "comment._id": 2},
         {
           $set: {
                "comment.$.value ": "New value set here"
            }
         },
         { new: true } // return updated post
        ).exec(function(error, post) {
            if(error) {
                return res.status(400).send({msg: 'Update failed!'});
            }

            return res.status(200).send(post);
        });