我在基于动态创建的索引更新集合时遇到问题。我正在尝试用以下代码更新里程碑数组:
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,以防止它在测试时更新...
答案 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/