MongoDB, rimuove l'oggetto dall'array


90

Doc:

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

C'è un modo per estrarre un oggetto specifico da un array? IE come estraggo l'intero oggetto item con ID 23 dall'array items.

Ho provato:

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

Tuttavia sono abbastanza sicuro di non utilizzare correttamente "pull". Da quello che ho capito, pull estrarrà un campo da un array ma non un oggetto.

Qualche idea su come estrarre l'intero oggetto dall'array.

Come bonus sto cercando di farlo in mongoose / nodejs, inoltre non sono sicuro che questo tipo di cose sia nell'API di mongoose ma non sono riuscito a trovarlo.



sì, è così. Grazie!
lostintranslation

Risposte:


153

provare..

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

sì, la mia sintassi era sbagliata. Grazie! Ho anche provato senza il turbamento e le opzioni multiple e anche questo ha funzionato.
persa

12
Quali sono questi valori booleani?
Nicolas Del Valle

1
@NicolasDelValle se ricordo bene, queste erano opzioni upserte multi. Per la sintassi e la documentazione correnti, controllare questo collegamento: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis

7

Ho un documento come

inserisci qui la descrizione dell'immagine

Devo eliminare l'indirizzo dall'array di indirizzi

Dopo aver cercato molto su Internet ho trovato la soluzione

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

        res.json(data);

      });

Come eseguire questa operazione nella CLI di MongoDB?
Ragesh D Antony

6

Puoi provarlo anche:

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

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

3

Per un singolo record in array:

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

Per più record con lo stesso numero di cellulare in array:

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

1

Utilizzare $pullper rimuovere i dati

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

0

Kishore Diyyana:

Se vuoi rimuovere tutti gli elementi inclusa la chiave dell'elenco degli attributi dell'elemento. Ecco l'esempio dell'operatore unset di mongoDB:

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

JSON Assomiglia a questo:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.