223 votes

Comment supprimer un élément d'un tableau dans mongodb ?

Voici la structure du tableau

contact: {
    phone: [
        {
            number: "+1786543589455",
            place: "New Jersey",
            createdAt: ""
        }
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }

    ]
}

Ici, je connais seulement l'ID mongo (_id) et le numéro de téléphone (+1786543589455) et je dois supprimer tout l'élément de tableau correspondant du document. c'est-à-dire l'élément index zéro dans le tableau phone correspond au numéro de téléphone et doit supprimer l'élément du tableau correspondant.

contact: {
    phone: [
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }
    ]
}

J'ai essayé avec la méthode de mise à jour suivante

collection.update(
    { _id: id, 'contact.phone': '+1786543589455' },
    { $unset: { 'contact.phone.$.number': '+1786543589455'} }
);

Mais cela supprime number: +1786543589455 de l'objet du tableau interne, pas l'élément index zéro dans le tableau phone. J'ai essayé avec pull aussi sans succès.

Comment supprimer l'élément du tableau dans mongodb?

366voto

Leonid Beschastny Points 10565

Essayez la requête suivante :

collection.update(
  { _id : id },
  { $pull: { 'contact.phone' : { number : '+1786543589455' } } }
);

Cela trouvera le document avec le _id fourni et supprimera le téléphone +1786543589455 de son tableau contact.phone.

Vous pouvez utiliser $unset pour annuler la valeur dans le tableau (le définir sur null), mais pas pour le supprimer complètement.

4 votes

Merci. Ça marche bien. J'ai essayé avec { $pull: { 'contact.phone.$': { 'contact.phone.$.number': '+1786543589455' } } } et { $pull: { 'contact.phone': { 'contact.phone.$.number': '+1786543589455' } } } sans succès. Ne comprends pas le fonctionnement des opérateurs positionnels ici?

2 votes

Est-ce qu'il y a un retour d'appel avec ça?

1 votes

@iLoveUnicorns vous pourriez ajouter un rappel comme troisième argument, ou vous pourriez utiliser la promesse retournée.

26voto

chirag jain Points 115

Ce code ci-dessous supprimera complètement l'élément objet du tableau, où le numéro de téléphone est '+1786543589455'

db.collection.update(
  { _id: id },
  { $pull: { 'contact': { number: '+1786543589455' } } }
);

8voto

Vous pouvez simplement utiliser $pull pour supprimer un sous-document. L'opérateur $pull supprime de tableau existant toutes les instances d'une valeur ou de valeurs qui correspondent à une condition spécifiée.

Collection.update({
    _id: parentDocumentId
  }, {
    $pull: {
      subDocument: {
        _id: SubDocumentId
      }
    }
  });

Cela permettra de trouver votre document parent en fonction de l'ID donné, puis de supprimer l'élément du sous-document qui correspondait aux critères donnés.

En savoir plus sur le pull ici.

6voto

Md Alamin Points 303

En Mongoose: de la document:

Pour supprimer un document d'un tableau de sous-documents, nous pouvons passer un objet avec un _id correspondant.

contact.phone.pull({ _id: itemId }) // remove
contact.phone.pull(itemId); // cela fonctionne également

Voir la réponse de Leonid Beschastny pour la réponse correcte.

3voto

KayV Points 3131

Pour supprimer tous les éléments du tableau indépendamment de l'ID donné, utilisez ceci :

collection.update(
  { },
  { $pull: { 'contact.phone': { number: '+1786543589455' } } }
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X