MongoDB, видалити об’єкт із масиву


88

Док:

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

Чи є спосіб витягнути конкретний об’єкт з масиву? IE, як я витягую весь об'єкт item з ідентифікатором 23 з масиву items.

Я намагався:

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

Однак я майже впевнений, що не правильно використовую функцію "тягнути". З того, що я розумію, pull витягне поле з масиву, але не об'єкт.

Будь-які ідеї, як витягнути весь об’єкт із масиву.

Як бонус я намагаюся зробити це в mongoose / nodejs, а також не впевнений, чи є такий тип речей в API мангуста, але я не зміг його знайти.


1
Ви пробували це? stackoverflow.com/questions/9048424/…
Myrne Stol

так, це все. Дякую!
загублений переклад

Відповіді:


148

спробуй ..

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

так, мій синтаксис помилковий. Дякую! Також пробували без розладів і декількох варіантів, і це теж працювало.
загублений переклад

12
Що це за булеві значення?
Ніколас Дель Валле

1
@NicolasDelValle, якщо я добре пам'ятаю, це були варіанти upsertі multi. Для поточного синтаксису та документації перевірте це посилання: docs.mongodb.com/manual/reference/method/db.collection.update
Лукас Лієсіс

7

У мене є такий документ, як

введіть тут опис зображення

Мені потрібно видалити адресу з масиву адрес

Після пошуку в Інтернеті я знайшов рішення

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

        res.json(data);

      });

Як це зробити в CLI MongoDB?
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
           }
       ]
    }


3

Для одного запису в масиві:

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

Для кількох записів з однаковим номером мобільного в масиві:

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

1

Використовуйте $pullдля видалення даних

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

0

Кішоре Діяна:

Якщо ви хочете видалити всі елементи, включаючи ключ списку атрибутів елементів. Ось приклад оператора unset mongoDB:

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

JSON Виглядає так:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.