我将这些文件放在一个集合中:
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$push': { tags: 'NoSQL' } },
{ multi: true })
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$pull': { tags: 'SQL' } },
{ multi: true })
我需要重命名所有" SQL"标签到" NoSQL"在所有文件中。我可以先添加新的tag-name,然后删除需要更新的那个:
gridLookUpEdit.Properties.View
但这需要两个单独的查询。
如何用一句话来实现这一目标?
答案 0 :(得分:4)
您使用的是错误的运算符。您需要使用$set
运算符和$
位置更新运算符。此外,您应该使用updateMany()
,因为在官方语言驱动程序中不推荐使用update()
。
db.getCollection('Book').updateMany(
{ 'tags': 'SQL' },
{ '$set': { 'tags.$': 'NoSQL' } }
)
答案 1 :(得分:2)
您可以使用$ operator
更新文档中的特定元素,并使用multi
选项更新所有匹配的文档。
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$set': { "tags.$": 'NoSQL' } },
{ multi: true })
请注意,这只会更新文档中第一个匹配的元素。因此,假设您在{tags: ["SQL", "Java", "SQL"]}
等文档中可能有重复的标记,则上述查询将仅更新第一个元素。您可以使用$addToSet
而不是$push
来保证文档中不会出现重复的标记。