文件是:
var house = {
"name": name1,
"steps":[
{
"step_id":1,
"value":9999,
"members": [
{
"user_id": 7,
},
{
"user_id": 1
}
]
},
{
"step_id":6,
"value":9999,
"members": [
{
"user_id": 7,
},
{
"user_id": 1
}
]
}
}
}
我需要做的就是按名称查找文档,找到MAX" step_id"价值并在那里更新"价值"字段为-1;
我尝试了这个,但它没有'为我工作。会很高兴得到任何帮助:))
db.collection('houses').find( {"name": "name1",max: { $max : "steps.$step_id" },{$set:{"steps.$.value":-1}, function (err, doc) {
if(err){
return
}
console.log('doc updated');
} );
答案 0 :(得分:0)
您可以使用Array#reduce
并为每个循环返回具有较大step_id
的对象。
然后更新属性。
var house = { name: "name1", steps:[{ step_id: 1, value: 9999, "members": [{ user_id: 7 }, { user_id: 1 }] }, { step_id: 6, value: 9999, members: [{ user_id: 7 }, { user_id: 1 }] }] };
house.steps.reduce((a, b) => a.step_id > b.step_id ? a : b).value = -1;
console.log(house);

.as-console-wrapper { max-height: 100% !important; top: 0; }