110 votes

MongoDB, suppression d'un objet du tableau

Doc :

{
   _id: 5150a1199fac0e6910000002,
   name: 'some name',
   items: [{
      id: 23,
      name: 'item name 23'
   },{
      id: 24,
      name: 'item name 24'
   }]
}

Existe-t-il un moyen d'extraire un objet spécifique d'un tableau ? Par exemple, comment puis-je extraire l'objet item entier avec l'identifiant 23 du tableau des items ?

J'ai essayé :

db.mycollection.update({'_id': ObjectId("5150a1199fac0e6910000002")}, {$pull: {id: 23}});

Cependant, je suis certain que je n'utilise pas le terme "tirer" correctement. D'après ce que j'ai compris, "pull" peut extraire un champ d'un tableau mais pas d'un objet.

Une idée pour extraire l'objet entier du tableau ?

En prime, j'essaie de faire cela dans mongoose/nodejs, et je ne suis pas sûr que ce type de chose soit dans l'API de mongoose, mais je ne l'ai pas trouvé.

188voto

sambomartin Points 1816

Essayez

db.mycollection.update(
    { '_id': ObjectId("5150a1199fac0e6910000002") }, 
    { $pull: { items: { id: 23 } } },
    false, // Upsert
    true, // Multi
);

11voto

Deepak Sisodiya Points 537

J'ai un document comme

enter image description here

Je dois supprimer une adresse du tableau d'adresses

Après de nombreuses recherches sur Internet, j'ai trouvé la solution

Customer.findOneAndUpdate(query, { $pull: {address: addressId} }, (err, data) => {
    if (err) {
        return res.status(500).json({ error: 'error in deleting address' });
    }

    res.json(data);
});

6voto

Viral Patel Points 753

Ma base de données :

{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
  "data" : [ 
    { "id" : 1 }, 
    { "id" : 2 }, 
    { "id" : 3 }
  ]
}

ma demande :

db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}

sortie :

{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
  "data" : [ 
    { "id" : 1 }, 
    { "id" : 2 }
  ]
}

6voto

Shubham Verma Points 2132

Vous pouvez également l'essayer :

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})

4voto

Chandrakesha Rao Points 139

Pour un seul enregistrement dans le tableau :

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true}
);

Pour un enregistrement multiple avec le même numéro de mobile dans le tableau :

db.getCollection('documents').update(
    { },
    {
        $pull: {
            items: { mobile: 1234567890 }
        }
    },
    { new:true, multi:true }
)

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