我有一個集合在這些文件中:重命名/更新特定標籤中的所有文檔
[{
"_id" : ObjectId("57496afadc964de30a8084a1"),
"name" : "MongoDB: The Definitive Guide",
"tags" : [ "IT", "SQL" ]
},{
"_id" : ObjectId("57496afadc964de30a8084a2"),
"name" : "MongoDB Applied Design Patterns",
"tags" : [ "SQL", "MongoDB" ]
}]
我需要的所有文件重命名所有的「SQL」標籤「的NoSQL」。我可以通過首先添加新的標籤名稱,然後刪除需要更新的標籤名稱:
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$push': { tags: 'NoSQL' } },
{ multi: true })
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$pull': { tags: 'SQL' } },
{ multi: true })
但是,這需要兩個單獨的查詢。
我該如何通過單詞聲明來實現?
Comment by @cubbuk:注意這隻會更新文檔中第一個匹配的元素。因此,假設您可能在{tags:[「SQL」,「Java」,「SQL」]}等文檔中有重複的標籤,則上述查詢將僅更新第一個元素。您可以使用$ addToSet而不是$ push來保證文檔中不會出現重複標籤。 – qais