【问题标题】:update multiple object with $gt operator inside array in mongodb [duplicate]在mongodb的数组中使用$gt运算符更新多个对象[重复]
【发布时间】:2018-12-29 10:04:45
【问题描述】:

我正在尝试更新文档中的一个数组,我想在其中根据大于条件执行更新操作。

这是我的文件:

{  
  _id:some_id,
  name:"test",
  data:[
         { __id:1,
           __data:[{a:"something"}]
          },
           { __id:2,
           __data:[{a:"something"}]
          },
           { __id:3,
           __data:[{a:"something"}]
          }....
        ]
}

如果数据数组中每个元素的 __id 大于 2,我想从 __id 中减去 1

目前我正在这样做,但它不起作用

db.collection('collection_name').update({name:"test","data.__id":{$gt:2}},{$inc:{"data.__id":-1}},{multi:true})

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    您必须使用$ positional 运算符来更新数组内的值

    db.getCollection('test').update(
     { "name": "test" , "data.__id": { "$gt": 2 }},
     { "$inc": { "data.$.__id": -1 }},
     { "multi": true }
    )
    

    【讨论】:

    • 以上查询只更新单个文档而不是所有符合条件的文档
    • 更新了我的答案
    • 我之前尝试过,但它不起作用,而且我也在使用回调,所以这是一个问题
    • 这里不需要回调或 .then 。 multi:true 没用?
    • 是的,看看这个:collection.update({"name":data.toRoom,"tab_data.__id":{"$gt":parseInt(data.removeWithId)}},{ "$inc":{"tab_data.$.__id":-1}},{"multi": true},callback)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2018-02-21
    • 2022-06-28
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多