Mongoose只更新数组的某些字段

时间:2017-10-04 12:34:00

标签: node.js mongodb mongoose mongodb-query

我有这样的文件集合:

{
 'email': 'daniele@gmail.com',
 'calls':[
          {
           'day'   : {'mm':9, 'dd':4},
           'value' : "AA"
           },
          {
           'day'   : {'mm':9, 'dd':3},
           'value' : "BB"
           },
          {
           'day'   : {'mm':9, 'dd':2},
           'value' : "CC"
           }
         ]
}

如何使用Mongoose更新所选日期的值? 我需要这样的东西:

使用 XX YY

更新第2/9天和第3/9天的值
Users.findOneAndUpdate(
           {
            'email'        : 'daniele@gmail.com',
            'calls.day.mm' : 9,
            'calls.day.dd' : {$in:[2, 3]}
           },
           {
            'calls.$0.mm'  : "XX",
            'calls.$1.mm'  : "YY"
           });

结果应为:

{
 'email': 'daniele@gmail.com',
 'calls':[
          {
           'day'   : {'mm':9, 'dd':4},
           'value' : "AA"
           },
          {
           'day'   : {'mm':9, 'dd':3},
           'value' : "YY"
           },
          {
           'day'   : {'mm':9, 'dd':2},
           'value' : "XX"
           }
         ]
}

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

根据上述描述作为解决方案,请尝试执行以下MongoDB更新操作

db.users.update(

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

)