ich diese Dokumente in einer Sammlung haben:Umbenennen/update ein bestimmtes Tag in allen Dokumenten
[{
"_id" : ObjectId("57496afadc964de30a8084a1"),
"name" : "MongoDB: The Definitive Guide",
"tags" : [ "IT", "SQL" ]
},{
"_id" : ObjectId("57496afadc964de30a8084a2"),
"name" : "MongoDB Applied Design Patterns",
"tags" : [ "SQL", "MongoDB" ]
}]
Ich brauche alle "SQL" Tags in allen Dokumenten "NoSQL" umzubenennen. Ich kann es tun, indem man zuerst die neuen Tag-Namen hinzufügen und dann den, zu entfernen, die aktualisiert werden muss:
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$push': { tags: 'NoSQL' } },
{ multi: true })
db.getCollection('Book').update(
{ tags: 'SQL' },
{ '$pull': { tags: 'SQL' } },
{ multi: true })
Dies erfordert jedoch zwei getrennte Abfragen.
Wie kann ich dies mit einer einzigen Aussage erreichen?
Kommentar von @cubbuk: Beachten Sie, dass dadurch nur das erste übereinstimmende Element in einem Dokument aktualisiert wird. Wenn Sie also doppelte Tags in einem Dokument wie {tags: ["SQL", "Java", "SQL"]} haben, aktualisiert die obige Abfrage nur das erste Element. Sie können $ addToSet anstelle von $ push verwenden, um sicherzustellen, dass in Ihren Dokumenten keine doppelten Tags vorkommen. – qais