Het probleem hier is dat je een paar dingen verkeerd begrijpt.
Wanneer u "outerArray.field.innerArray": { $in: [ 1, 3 ] }
in uw zoekopdracht, krijgt u niet alleen innerArray
waar heeft 1 of 3. U krijgt documenten waar deze arrays bestaan.
U zoekt dus het hele document op.
U moet arrayFilter
gebruiken
om waarden bij te werken wanneer het filter overeenkomt.
Dus, als ik je goed heb begrepen, is de vraag die je wilt:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Voorbeeld hier
Merk op hoe het eerste object in update
is leeg. Je moet daar het veld plaatsen dat overeenkomt met het document (niet de array, het document).
Als u slechts één document wilt bijwerken, moet u het eerste object (queryobject) vullen met de gewenste waarden, bijvoorbeeld:{"_id": 11}
.