問題は、$
を使用できないことです 配列内のネストされたレベルでの一致を示す演算子。そして最も重要なのは、指定できるのは1回だけです。
ドキュメント
から述べられているように 、それは$
のみ 最初に一致する 要素が見つかりました。それはだけではありません クエリに複数の一致がある場合は、最初の一致のみが選択されることを意味します。これは、のみを意味します。 最初に一致した 配列位置が使用されます。つまり、このようなものも機能しないということです:
{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 }
index
と誤って一致するため 1
予期していなかったアイテムを評価して更新します。
全体を更新できる可能性がある場合 配列の場合、次のように機能します。
{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }
index
なので、私が言ったとおりです。 最初に一致しています 配列。
しかし、あなたが持っている構造を考えると、あなたの最良の選択肢は、代わりにそのトップレベルの配列をサブドキュメントに変更することであるように思われます。実際には、これが2つではなく配列である理由がない限り 現在のように見える混合ドキュメントタイプ。