sql >> Base de Datos >  >> NoSQL >> MongoDB

Actualización de un registro profundo en MongoDb

El problema es que no puedes usar el $ operador para mostrar coincidencias en niveles anidados en una matriz. Y lo más importante, solo puede especificar una vez.

Como se indica en la documentación , es que el $ solo coincidir con el primero elemento encontrado. Que no solo significa que si tuviera varias coincidencias para su consulta, solo se elegiría la primera, también significa que solo el primero emparejado se utilizará la posición de la matriz. Eso significa que algo como esto tampoco funcionaría:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Como eso coincidiría erróneamente con el index 1 valore y actualice un elemento que no esperaba.

Si pudiera actualizar la totalidad matriz entonces lo siguiente funcionaría:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Eso es como dije, porque el index coincide con el primero matriz.

Pero dada la estructura que tiene, parecería que su mejor opción es cambiar esa matriz de nivel superior para que sea un subdocumento. A menos que en realidad esto tenga una razón para ser una matriz, en lugar de los dos tipos de documentos mixtos que parece ser ahora.