Problemem jest twoje niezrozumienie kilku rzeczy.
Kiedy wykonasz "outerArray.field.innerArray": { $in: [ 1, 3 ] }
do zapytania, nie dostajesz tylko innerArray
gdzie ma 1 lub 3. Otrzymujesz dokumenty, w których istnieją te tablice.
Więc pytasz o cały dokument.
Musisz użyć arrayFilter
aby zaktualizować wartości, gdy filtr jest zgodny.
Tak więc, jeśli dobrze zrozumiałem, zapytanie, które chcesz, to:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Przykład tutaj
Zwróć uwagę, jak pierwszy obiekt w update
jest pusty. Musisz umieścić tam pole pasujące do dokumentu (nie tablicy, dokumentu).
Jeśli chcesz zaktualizować tylko jeden dokument, musisz wypełnić pierwszy obiekt (obiekt zapytania) żądanymi wartościami, na przykład:{"_id": 11}
.