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

Atualizando um registro profundo no MongoDb


O problema é que você não pode usar o $ operador para mostrar a correspondência em níveis aninhados em uma matriz. E o mais importante, você só pode especificar uma vez.

Conforme declarado na documentação , é que o $ será somente corresponder ao primeiro elemento encontrado. Isso não apenas significa que se você tivesse várias correspondências para sua consulta, apenas a primeira seria escolhida, também significa que somente a primeira correspondência posição da matriz será usada. Isso significa que algo assim também não funcionaria:
{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Como isso corresponderia erroneamente ao index 1 valor e atualizar um item que você não esperava.

Se você pudesse atualizar o todo array então o seguinte funcionaria:
{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Isso é como eu disse, porque o index está correspondendo ao primeiro variedade.

Mas, dada a estrutura que você tem, parece que sua melhor opção é alterar essa matriz de nível superior para ser um subdocumento. A menos que na verdade isso tenha um motivo para ser uma matriz, em vez dos dois tipos de documentos mistos que parece ser agora.