Проблемът тук е вашето неразбиране на куп неща.
Когато направите "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
празно е. Трябва да поставите полето там, за да съответства на документа (не на масива, на документа).
Ако искате да актуализирате само един документ, трябва да попълните първия обект (обект на заявка) със стойности, които желаете, например:{"_id": 11}
.