MongoDB, usuń obiekt z tablicy

88

Doc:

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

Czy istnieje sposób na pobranie określonego obiektu z tablicy? IE jak wyciągnąć cały obiekt item o id 23 z tablicy items.

Próbowałem:

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

Jestem jednak pewien, że nie używam poprawnie opcji „ciągnij”. Z tego, co rozumiem, pull wyciągnie pole z tablicy, ale nie obiekt.

Wszelkie pomysły, jak wyciągnąć cały obiekt z tablicy.

Jako bonus próbuję to zrobić w mongoose / nodejs, a także nie jestem pewien, czy tego typu rzeczy są w API mangusty, ale nie mogłem tego znaleźć.

utracony sens po tłumaczeniu
źródło
1
Czy próbowałeś tego? stackoverflow.com/questions/9048424/…
Myrne Stol
tak to jest to. Dzięki!
Lostintranslation

Odpowiedzi:

148

próbować..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);
sambomartin
źródło
tak, moja składnia była zła. Dzięki! Próbowałem też bez zmartwień i wielu opcji i to również działało.
Lostintranslation
12
Jakie są te wartości logiczne?
Nicolas Del Valle
1
@NicolasDelValle o ile dobrze pamiętam to były opcje upserti multi. Aby zapoznać się z aktualną składnią i dokumentacją, sprawdź ten link: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis
7

Mam taki dokument jak

wprowadź opis obrazu tutaj

Muszę usunąć adres z tablicy adresów

Po przeszukaniu wielu stron w internecie znalazłem rozwiązanie

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
źródło
Jak to zrobić w MongoDB CLI?
Ragesh D Antony
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
           }
       ]
    }
Viral Patel
źródło
4

Możesz też spróbować:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})
Shubham Verma
źródło
3

Dla pojedynczego rekordu w tablicy:

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

Dla wielu rekordów z tym samym numerem telefonu komórkowego w tablicy:

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true,multi:true}
)
Chandrakesha Rao
źródło
1

Służy $pulldo usuwania danych

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});
KARTHIKEYAN.A
źródło
0

Kishore Diyyana:

Jeśli chcesz usunąć wszystkie elementy, w tym klucz z listy atrybutów elementów. Oto przykład operatora unset mongoDB:

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

JSON Wygląda tak:

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

Kishore BABU Diyyana
źródło