MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Matriz profunda de atualização do MongoDB


Infelizmente, no momento, só é possível usar um único "$" posicional por atualização. Isso limita a atualização a uma única matriz incorporada, semelhante ao exemplo na documentação:http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator(De sua postagem, parece que você já encontrei isso, mas incluí o link para o benefício de qualquer outro usuário que esteja lendo este post.)

Para fazer a atualização, você terá que saber a posição de duas das três seguintes:A posição da banda na matriz "bandas", a posição do álbum na matriz de álbuns ou a posição da faixa na matriz "faixas".

Há uma solicitação de recurso para essa funcionalidade e está prevista para a versão 2.3.0 (embora isso esteja sujeito a alterações).
https://jira.mongodb.org/browse/SERVER-831 "Correspondência de operador posicional Matrizes aninhadas"

Por enquanto, você terá que saber a posição dos subdocumentos em duas das três matrizes:
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!"}})

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