Tady je problém ve vašem nepochopení párových věcí.
Když provedete "outerArray.field.innerArray": { $in: [ 1, 3 ] }
do vašeho dotazu nedostáváte pouze innerArray
kde má 1 nebo 3. Získáváte dokumenty, kde tato pole existují.
Dotazujete se tedy na celý dokument.
Musíte použít arrayFilter
aktualizovat hodnoty, když se filtr shoduje.
Pokud jsem vám tedy správně rozuměl, dotaz, který chcete, je:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Příklad zde
Všimněte si, jak se první objekt update
je prázdný. Musíte tam vložit pole, které odpovídá dokumentu (ne pole, dokument).
Pokud chcete aktualizovat pouze jeden dokument, musíte první objekt (objekt dotazu) vyplnit požadovanými hodnotami, například:{"_id": 11}
.