Puoi farlo specificando qualcosa che corrisponda al "documento" e quindi alla voce dell'array "shifts" richiesta come espressione di query per un .update()
. Quindi applica il posizionale $
operatore
per l'indice di matrice abbinato con $pull
:
db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)
In questo caso va bene poiché stai solo cercando di "corrispondere" all'array "outer" nella struttura nidificata e al $pull
ha argomenti di query propri per identificare la voce dell'array da rimuovere.
Tuttavia, dovresti davvero stare attento usando "array nidificati". Come mentre un $pull
un'operazione come questa funziona, gli aggiornamenti all'array "inner" non sono realmente possibili poiché posizionale $
operatore
corrisponderà solo al "primo" elemento che soddisfa la condizione. Quindi il tuo esempio di "Mary Mack" in più turni corrisponderebbe sempre e solo alla prima voce dell'array "shifts" trovata.