MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Update Deep Array

Leider ist es derzeit nur möglich, eine einzelne "$"-Stellung pro Update zu verwenden. Dadurch wird das Update auf ein einzelnes eingebettetes Array beschränkt, ähnlich dem Beispiel in der Dokumentation:http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator(Aus Ihrem Beitrag sieht es so aus, als hätten Sie es bereits getan gefunden, aber ich habe den Link für alle anderen Benutzer eingefügt, die diesen Beitrag lesen.)

Um die Aktualisierung vorzunehmen, müssen Sie die Position von zwei der folgenden drei kennen:Die Position der Band im "Bands"-Array, die Position des Albums im Album-Array oder die Position des Titels im Array "Tracks".

Es gibt eine Funktionsanfrage für diese Funktionalität, und sie ist für Version 2.3.0 geplant (obwohl Änderungen vorbehalten sind).
https://jira.mongodb.org/browse/SERVER-831 „Positional Operator Matching Verschachtelte Arrays"

Zunächst müssen Sie die Position der Unterdokumente in zwei der drei Arrays kennen:

db.music.update({genre : "Grunge", "bands.name" : "Nirvana"}, {$set:{"bands.$.albums.0.tracks.0.name":"Smells Like Teen Spirit!"}})

db.music.update({genre : "Grunge", "bands.0.albums.name" : "Nevermind"}, {$set:{"bands.0.albums.$.tracks.0.name":"Smells Like Teen Spirit!"}})

oder

db.music.update({genre : "Grunge", "bands.0.albums.0.tracks.order" : 1}, {$set:{"bands.0.albums.0.tracks.$.name":"Smells Like Teen Spirit!"}})