2017-08-24 16 views
0

文書は次のとおりです。ネストした配列の最大値を見つける方法は?

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に存在し、「値」フィールドを更新が見つけ、名前で文書を見つけることです。

私はこれを試しましたが、それは私のために働いていません。あなたはArray#reduceを使用してstep_id大きいと、すべてのループのためのオブジェクトを返すことができる任意のヘルプ:)

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

のために喜んでいるでしょう。

次にプロパティを更新します。

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

関連する問題