嗨,让我们说我在集合中有这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为1
和2
的集合。我想要替换的用户数组中我想要的唯一更新" sam"与超人"
答案 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 }
始终设置为开启。