Das Problem hier ist, dass Sie ein paar Dinge missverstehen.
Wenn Sie "outerArray.field.innerArray": { $in: [ 1, 3 ] }
In Ihrer Abfrage erhalten Sie nicht nur innerArray
wo hat 1 oder 3. Sie erhalten Dokumente, wo diese Arrays existieren.
Sie fragen also das gesamte Dokument ab.
Sie müssen arrayFilter
verwenden
um Werte zu aktualisieren, wenn der Filter übereinstimmt.
Wenn ich Sie also richtig verstanden habe, lautet die gewünschte Abfrage:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Beispiel hier
Beachten Sie, wie das erste Objekt in update
ist leer. Sie müssen dort das Feld einfügen, das dem Dokument entspricht (nicht dem Array, dem Dokument).
Wenn Sie nur ein Dokument aktualisieren möchten, müssen Sie das erste Objekt (Abfrageobjekt) mit den gewünschten Werten füllen, zum Beispiel:{"_id": 11}
.