如何在单独的对象中更新多个数组

时间:2017-10-27 09:26:46

标签: mongodb

嗨,让我们说我在集合中有这3个对象

{
  id: 1,
  users: ['sam', 'john', 'lizy'],
  isActive: false,
}, {
  id: 2,
  users: ['sam', 'mathew', 'chandler'],
  isActive: false,
}, {
  id: 3,
  users: ['monica', 'rachel', 'sam'],
  isActive: false,
}

我想更新ID为12的集合。我想要替换的用户数组中我想要的唯一更新" sam"与超人"

1 个答案:

答案 0 :(得分:2)

您基本上需要positional $ operator以及$in才能匹配这两个文档:

db.getCollection('collection').updateMany(
  { "id": { "$in": [1,2] }, "users": "sam"  },
  { "$set": { "users.$": "superman" } }
)

请注意,如果没有$in,即使它位于不同的数组位置,它仍然会更新"sam"

使用位置运算符的关键部分是需要匹配数组“position”,因此我们在查询条件中包含"users": "sam"。当应用操作(在这种情况下为$set)时,这会将$转换为数组中元素的“匹配位置”。

另请注意,.updateMany()是相当于.update()的现代驱动程序,{ "multi": true }始终设置为开启。