MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

rimozione dell'oggetto dall'array nidificato di oggetti mongodb

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.