基于MongoDB中的属性更新嵌套数组对象

基于MongoDB中的属性更新嵌套数组对象,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个MongoDB集合,其中包含如下文档: { createdTimestamp: 111111111111, items: [{ itemName: 'Name 1', quantity: 10 }, { itemName: 'Name 2' quantity: 20 }] } 现在,我想更新所有文档,以便将itemName:'Name 1'更新为itemName:'newname'。 更新后

我有一个MongoDB集合,其中包含如下文档:

{
    createdTimestamp: 111111111111,
    items: [{
        itemName: 'Name 1',
        quantity: 10
    }, {
        itemName: 'Name 2'
        quantity: 20
    }]
}
现在,我想更新所有文档,以便将
itemName:'Name 1'
更新为
itemName:'newname'
。 更新后,上述文档应如下所示:

{
    createdTimestamp: 111111111111,
    items: [{
        itemName: 'New Name',
        quantity: 10
    }, {
        itemName: 'Name 2'
        quantity: 20
    }]
}
有什么方法可以做到这一点,而不必自己迭代所有文档?

您需要使用运算符来更新数组元素,并且使用
multi:true
选项可以使用相同的匹配项更新多个文档

db.collection.update(
  { 'items': { '$elemMatch': { 'itemName': 'Name 1' }}},
  { '$set': { 'items.$.itemName': 'New Name' }},
  { 'multi': true }
)
mongodb3.6

您可以使用mongoDb


成功了。不得不做一个小改动:
“$elemMatch”:{itemName:'Name 1'}
db.collection.update(
  { 'items': { '$elemMatch': { 'itemName': 'Name 1' }}},
  { '$set': { 'items.$[item].itemName': 'New Name' }},
  { 'arrayFilter': [{ 'item.itemName': 'Name 1' }], 'multi': true }
)
db.collection.update(
  { },
  { "$set": { "items.$[elem].itemName": 'new Name' } },
  { "arrayFilters": [{ "elem.itemName": 'Name 1' }], "multi": true }
)