重命名/更新所有文档中的特定标记

时间:2016-05-28 11:10:43

标签: mongodb mongodb-query

我将这些文件放在一个集合中:

  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

但这需要两个单独的查询。

如何用一句话来实现这一目标?

2 个答案:

答案 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来保证文档中不会出现重复的标记。