ここでの問題は、コピュラのことを誤解していることです。
"outerArray.field.innerArray": { $in: [ 1, 3 ] }
クエリに、innerArray
だけを取得しているわけではありません ここで、1または3があります。これらのアレイが存在するドキュメントを取得しています。
つまり、ドキュメント全体をクエリしているのです。
arrayFilter
を使用する必要があります
フィルタが一致したときに値を更新します。
したがって、私があなたを正しく理解している場合、必要なクエリは次のとおりです。
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
例
update
への最初のオブジェクトの方法に注意してください 空です。ドキュメント(配列やドキュメントではなく)と一致するフィールドをそこに配置する必要があります。
1つのドキュメントのみを更新する場合は、最初のオブジェクト(クエリオブジェクト)に必要な値を入力する必要があります。例:{"_id": 11}
。