【问题标题】:Mongoose update just some fields of an ArrayMongoose 仅​​更新 Array 的一些字段
【发布时间】:2017-10-05 15:56:25
【问题描述】:

我有一个这样的文档集合:

{
 '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 仅​​更新所选日期的值? 我需要类似的东西:

XXYY

更新第 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"
           }
         ]
}

【问题讨论】:

  • 抱歉,我编辑了我的问题。是关于“更新”而不是预测
  • 可能是错的,但我不认为这是可能的。因为 mongo findAndModify 应用 query..find 文档,然后设置您指定的属性。在您的情况下,您进行智能更新,例如“将匹配 2 的值设置为 X,将匹配 3 的值设置为 Y”,mongo 不在乎这个..它只会更新您设置的内容...我建议运行 find ..更新您需要的内容并保存文档。
  • 所以我应该find({'email':'daniele@gmail.com'})用户,扫描所有user.calls.day.dd,并为每个==2 || ==3检查是否是==2 || ==3。然后修改调用,最后做@987654327 @。对吗?
  • 是的..找到用户..获取他所有的调用值,检查和更新你喜欢的属性。
  • 但我又不是 100% 确定..也许有一个技巧可以按照你的方式去做。

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

试试这个

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"
        }
    })

【讨论】:

    【解决方案2】:

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

    db.users.update(
    
        {
            calls: {
                $elemMatch: {
                    'day.dd': {
                        $in: [2, 3]
                    }
                }
            }
        }, {
            $set: {
                'calls.$.value': 'XX'
            }
        }
    
    )
    

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2015-10-05
      • 2016-12-15
      • 2023-04-09
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2021-06-21
      相关资源
      最近更新 更多