MongoDB, удалить объект из массива

88

Док:

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

Есть ли способ извлечь конкретный объект из массива? IE, как мне вытащить весь объект элемента с идентификатором 23 из массива элементов.

Я пытался:

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

Однако я почти уверен, что неправильно использую «тянуть». Насколько я понимаю, pull будет извлекать поле из массива, но не объект.

Любые идеи, как вытащить весь объект из массива.

В качестве бонуса я пытаюсь сделать это в mongoose / nodejs, а также не уверен, есть ли этот тип вещей в API мангуста, но я не смог его найти.

утрачено при переводе
источник
1
Вы пробовали это? stackoverflow.com/questions/9048424/…
Myrne Stol
ага, вот и все. Благодарность!
lostintranslation

Ответы:

148

пытаться..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);
Самбомартин
источник
да, мой синтаксис был неправильным. Благодарность! Также попробовал без огорчений и нескольких вариантов, и это тоже сработало.
lostintranslation
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);

      });
Дипак Сисодия
источник
Как это сделать в MongoDB CLI?
Рагеш Ди Энтони,
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

Вы также можете попробовать:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})
Шубхам Верма
источник
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}]}

Кишор БАБУ Дийяна
источник