2017-10-04 104 views
0

的一些領域我的文檔這樣一個集合:貓鼬更新只是一個數組

{ 
'email': '[email protected]', 
'calls':[ 
      { 
      'day' : {'mm':9, 'dd':4}, 
      'value' : "AA" 
      }, 
      { 
      'day' : {'mm':9, 'dd':3}, 
      'value' : "BB" 
      }, 
      { 
      'day' : {'mm':9, 'dd':2}, 
      'value' : "CC" 
      } 
     ] 
} 

如何更新與貓鼬選定一天只值是多少? 我需要這樣的東西:

更新天2/9和3/9值與XXYY

Users.findOneAndUpdate(
      { 
      'email'  : '[email protected]', 
      'calls.day.mm' : 9, 
      'calls.day.dd' : {$in:[2, 3]} 
      }, 
      { 
      'calls.$0.mm' : "XX", 
      'calls.$1.mm' : "YY" 
      }); 

結果應該是:

{ 
'email': '[email protected]', 
'calls':[ 
      { 
      'day' : {'mm':9, 'dd':4}, 
      'value' : "AA" 
      }, 
      { 
      'day' : {'mm':9, 'dd':3}, 
      'value' : "YY" 
      }, 
      { 
      'day' : {'mm':9, 'dd':2}, 
      'value' : "XX" 
      } 
     ] 
} 
+0

對不起,我編輯了我的問題。是關於「更新」而不是預測 – DeLac

+0

可能是錯誤的,但我不認爲這是可能的。因爲mongo findAndModify應用query..find文檔,然後設置您指定的屬性。在你的情況下,你做智能更新,如'值匹配2設置爲X和值匹配3設置爲Y',mongo不關心這個..它只會更新你設置...我會建議運行find ..更新你所需要的並保存文件。 –

+0

所以我應該'查找({'email':'[email protected]'})'用戶,掃描所有的'user.calls.day.dd',併爲他們每個人,檢查它是否= = 2 || == 3'。然後修改調用,並在最後執行'user.save()'。對? – DeLac

回答

0

嘗試這

Users.update(
    { 
    'email': '[email protected]', 
    'calls.day.mm':9, 
     'calls.day.dd':{ 
      $in:[2,3] 
     } 
    },{ 
     $set:{ 
       "calls.1.value":"XXX", 
       "calls.2.value":"YYY" 
     } 
    }) 
0

根據上述說明作爲解決方案請嘗試執行以下MongoDB更新操作

db.users.update(

    { 
     calls: { 
      $elemMatch: { 
       'day.dd': { 
        $in: [2, 3] 
       } 
      } 
     } 
    }, { 
     $set: { 
      'calls.$.value': 'XX' 
     } 
    } 

)