Du kan gøre dette ved at angive noget, der matcher "dokumentet" og derefter den nødvendige "shifts"-arrayindgang som forespørgselsudtrykket for en .update()
. Anvend derefter positionelle $
operatør
for det matchede array-indeks med $pull
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
Det er okay i dette tilfælde, da du kun forsøger at "matche" på det "ydre" array i den indlejrede struktur og $pull
har sine egne forespørgselsargumenter til at identificere den matrixindgang, der skal fjernes.
Du skal dog være forsigtig med at bruge "indlejrede arrays". Som mens en $pull
operation som denne fungerer, opdateringer til det "indre" array er ikke rigtigt mulige, da positionelle $
operatør
vil kun matche det "første" element, der opfylder betingelsen. Så dit eksempel på "Mary Mack" i flere skift ville kun nogensinde matche i den første "skift"-array-indgang fundet.