2017-08-24 34 views
0

該文件是:如何找到嵌套數組中的最大值nd更新它?

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

你可以使用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; }

相關問題