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é.



ouais c'est ça. Merci!
lostintranslation

Réponses:


148

essayer..

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

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);

      });

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
           }
       ]
    }

4

Vous pouvez également l'essayer:

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

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}
)

1

Utilisez $pullpour supprimer les données

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

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}]}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.