2017-10-04 76 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' 
     } 
    } 

)