如何在嵌套数组nd update中找到最大值呢?

时间:2017-08-24 14:30:04

标签: javascript mongodb

文件是:

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');
            } );

1 个答案:

答案 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; }