MongoDB-在指定索引处动态设置NodeJS更新数组元素

时间:2019-04-03 22:49:51

标签: node.js mongodb mongoose

我在基于动态创建的索引更新集合时遇到问题。我正在尝试用以下代码更新里程碑数组:

var query1 = 'milestones.'+data.next_milestone+'.actual_date';
var query2='milestones.'+data.next_milestone+'.submitted';
var query3= 'milestones.'+data.next_milestone+'.comment' ;
        Project.findByIdAndUpdate(req.body.id,
          {$set:
          {
            query1 : new Date(req.body.date),
            query2 : true,
            query3 : req.body.comment,
          "next_milestone" : data.next_milestone+0
        }}).then((data)=>{
                  res.status(200).send();
              })

我测试了查询字符串,它们都产生正确的字符串,例如:

milestones.1.comment

但是我的收藏集没有更新,下一个里程碑部分正在运行,我在那里设置了0,以防止它在测试时更新...

1 个答案:

答案 0 :(得分:0)

您可以通过ID标识要更新的里程碑,可以使用mongo $运算符标识来更新数组内的里程碑/对象

Project.findOneAndUpdate({_id: req.body.id, "milestones._id": <your_milestone_id> },
     { $set: { "milestones.$.comment" : 666 } },function(err,doc){

     });

在此处查看详细信息: https://docs.mongodb.com/manual/reference/operator/update/positional/#up.S

如果要添加新的里程碑,请改用mongo push: https://docs.mongodb.com/manual/reference/operator/update/push/