2013-06-06 6 views
80

structure de tableau est iciComment supprimer un élément de tableau dans mongodb?

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

    ] 
} 

Ici, je ne connais que l'id mongo (_id) et le numéro de téléphone (+1786543589455) et je dois enlever ce tout élément de tableau correspondant du document. i.e élément indexé zéro dans le tableau de téléphone est apparié avec le numéro de téléphone et doit supprimer l'élément de tableau correspondant.

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

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

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

Mais il supprime number: +1786543589455 de l'objet tableau intérieur, non nul élément indexé dans le tableau de téléphone. Essayé avec pull également sans succès. Comment supprimer l'élément de tableau dans mongodb?

Répondre

144

Essayez la requête suivante:

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

Il trouvera document avec le donné _id et retirer le téléphone +1786543589455 de son tableau contact.phone.

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

+2

Thank you. Cela fonctionne bien. J'ai essayé avec '{$ pull: {'contact.phone. $': {'Contact.phone. $. Nombre': '+1786543589455'}}}' et '{$ pull: {'contact.phone': { 'contact.phone. $. number': '+1786543589455'}}} 'sans succès. Ne comprend pas le travail des opérateurs positionnels ici? –

+1

Y a-t-il un rappel? –

+1

@iLoveUnicorns vous pouvez ajouter un rappel en tant que troisième argument, ou vous pouvez utiliser la promesse retournée. –

6

Ce code ci-dessous supprime l'élément objet complet du tableau, où le numéro de téléphone est « +1786543589455 »

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