MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb:Element in verschachteltes Array verschieben, wenn die Bedingung erfüllt ist

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} .