MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

supprimer un objet d'un tableau imbriqué d'objets mongodb

Vous pouvez le faire en spécifiant quelque chose pour correspondre au "document", puis l'entrée de tableau "shifts" requise comme expression de requête pour un .update() . Appliquez ensuite le positionnel $ opérateur pour l'index de tableau correspondant avec $pull :

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

Ce n'est pas grave dans ce cas puisque vous essayez uniquement de "faire correspondre" le tableau "externe" dans la structure imbriquée et le $pull a ses propres arguments de requête pour identifier l'entrée de tableau à supprimer.

Vous devriez vraiment être prudent en utilisant des "tableaux imbriqués". Comme un $pull une opération comme celle-ci fonctionne, les mises à jour du tableau "interne" ne sont pas vraiment possibles car le positionnel $ opérateur ne correspondra qu'au "premier" élément qui remplit la condition. Ainsi, votre exemple de "Mary Mack" dans plusieurs équipes ne correspondra jamais qu'à la première entrée de tableau "shifts" trouvée.