U kunt dit doen door iets op te geven dat overeenkomt met het "document" en vervolgens het vereiste array-item "shifts" op te geven als de query-expressie voor een .update()
. Pas vervolgens de positionele $
toe operator
voor de overeenkomende array-index met $pull
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
Dat is oké in dit geval, aangezien je alleen probeert te "matchen" op de "buitenste" array in de geneste structuur en de $pull
heeft eigen query-argumenten om de array-invoer te identificeren die moet worden verwijderd.
Je moet echt voorzichtig zijn met het gebruik van "geneste arrays". Zoals terwijl een $pull
bewerking als deze werkt, zijn updates van de "innerlijke" array niet echt mogelijk omdat de positionele $
operator
komt alleen overeen met het "eerste" element dat aan de voorwaarde voldoet. Dus uw voorbeeld van "Mary Mack" in meerdere ploegen komt alleen overeen met de eerste gevonden "ploegen"-array.