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

Entfernen von Objekten aus dem verschachtelten Array von Objekten mongodb

Sie können dies tun, indem Sie etwas angeben, das mit dem „Dokument“ übereinstimmt, und dann den erforderlichen „Shifts“-Array-Eintrag als Abfrageausdruck für ein .update() angeben . Wenden Sie dann den positionsbezogenen $ an Betreiber für den übereinstimmenden Array-Index mit $pull :

db.collection.update(
 { "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
 { "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)

Das ist in diesem Fall in Ordnung, da Sie nur versuchen, das "äußere" Array in der verschachtelten Struktur und dem $pull hat eigene Abfrageargumente, um den zu entfernenden Array-Eintrag zu identifizieren.

Sie sollten jedoch wirklich vorsichtig sein, wenn Sie "verschachtelte Arrays" verwenden. Als während ein $pull Vorgang wie dieser funktioniert, Aktualisierungen des "inneren" Arrays sind nicht wirklich möglich, da der positional $ Betreiber stimmt nur mit dem "ersten" Element überein, das die Bedingung erfüllt. Ihr Beispiel von „Mary Mack“ in mehreren Schichten würde also immer nur mit dem ersten gefundenen „Schichten“-Array-Eintrag übereinstimmen.