MongoDB, supprimer l'objet du tableau

88

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? IE comment puis-je extraire l'objet item entier avec l'ID 23 du tableau items.

J'ai essayé:

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

Cependant, je suis presque sûr que je n'utilise pas correctement «pull». D'après ce que je comprends, pull tirera un champ d'un tableau mais pas d'un objet.

Toutes les idées sur la façon d'extraire l'objet entier du tableau.

En prime, j'essaie de le faire dans mongoose / nodejs, je ne sais pas non plus si ce type de chose est dans l'API mangouste mais je ne l'ai pas trouvé.

perdu dans la traduction
la source
1
Avez-vous essayé cela? stackoverflow.com/questions/9048424/…
Myrne Stol
ouais c'est ça. Merci!
lostintranslation

Réponses:

148

essayer..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);
sambomartin
la source
oui, ma syntaxe était fausse. Merci! Également essayé sans les options bouleversées et multiples et cela a également fonctionné.
lostintranslation
12
Quelles sont ces valeurs booléennes?
Nicolas Del Valle
1
@NicolasDelValle si je me souviens bien, c'étaient des options upsertet multi. Pour la syntaxe et la documentation actuelles, consultez ce lien: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis
7

J'ai un document comme

entrez la description de l'image ici

Je dois supprimer l'adresse du tableau d'adresses

Après avoir cherché beaucoup sur Internet, j'ai trouvé la solution

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

        res.json(data);

      });
Deepak Sisodiya
la source
Comment faire cela dans MongoDB CLI?
Ragesh D Antony le
5
my database:->
        {
       "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }, 
           {
               "id" : 3
           }
       ]
    }

MY QUERY:->
db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}
OutPut:->
{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }
       ]
    }
Patel viral
la source
4

Vous pouvez également l'essayer:

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

Pour un seul enregistrement dans le tableau:

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

Pour plusieurs enregistrements avec le même numéro de mobile dans le tableau:

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

Utilisez $pullpour supprimer les données

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});
KARTHIKEYAN.A
la source
0

Kishore Diyyana:

Si vous souhaitez supprimer tous les éléments, y compris la clé de la liste des attributs d'élément. Voici l'exemple de l'opérateur mongoDB unset:

db.UM_PREAUTH_CASE.update ({'Id': 123}, {$ unset: {dataElements: ""}})

JSON ressemble à ceci:

{"Id": 123, "dataElements": [{"createdBy": "Kishore Babu Diyyana", "createdByUserId": 2020}, {"createdBy": "Diyyana Kishore", "createdByUserId": 2021}]}

Kishore BABU Diyyana
la source