首页 > 解决方案 > MongoDB - NodeJS 动态更新指定索引处的数组元素

问题描述

我根据动态创建的索引更新我的集合时遇到问题。我想要做的是使用以下代码更新我的里程碑数组:

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 以防止它在测试时更新......

标签: node.jsmongodbmongoose

解决方案


您可以通过 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。小号

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


推荐阅读