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.