【问题标题】:MongoDB - NodeJS update array element at specifix index set dynamicallyMongoDB - NodeJS 动态更新指定索引处的数组元素
【发布时间】:2019-04-04 07:07:56
【问题描述】:

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

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.js mongodb mongoose


    【解决方案1】:

    您可以通过 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/

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 1970-01-01
      • 2017-07-02
      • 2021-08-15
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      相关资源
      最近更新 更多