2013-12-07 4 views
1

Давайте предположим, что это мои данные:Как удалить объект внутри массива, внутри объекта внутри массива с MongoDB

{ 
"_id" : ObjectId("52892936b996cc760d000002"), 
"created_at" : ISODate("2013-11-17T20:38:14.248Z"), 
"name" : "Two", 
"subcategories" : [ 
    { 
     "subcategory" : "Alpha", 
     "products" : [ 
      { 
       "name" : "Product 5", 
       "primary_price" : "2", 
       "secondary_price" : "3", 
       "created_at" : "Sun Nov 17 2013 20:39:20 GMT+0000 (GMT)" 
      }, 
      { 
       "name" : "Product 7", 
       "primary_price" : "2", 
       "secondary_price" : "3", 
       "created_at" : "Sun Nov 17 2013 20:39:31 GMT+0000 (GMT)" 
      } 
     ] 
    }, 
    { 
     "subcategory" : "Bravo", 
     "products" : [ 
      { 
       "name" : "Product 6", 
       "primary_price" : "2", 
       "secondary_price" : "3", 
       "created_at" : "Sun Nov 17 2013 20:39:26 GMT+0000 (GMT)" 
      }, 
      { 
       "name" : "Product 8", 
       "primary_price" : "2", 
       "secondary_price" : "3", 
       "created_at" : "Sun Nov 17 2013 20:39:38 GMT+0000 (GMT)" 
      }, 
      { 
       "name" : "Apple", 
       "primary_price" : "5", 
       "secondary_price" : "13", 
       "created_at" : "Sat Nov 23 2013 12:00:18 GMT+0000 (GMT)" 
      }, 
      { 
       "name" : "Lemon", 
       "primary_price" : "9", 
       "secondary_price" : "13", 
       "created_at" : "Sat Nov 23 2013 12:00:32 GMT+0000 (GMT)" 
      } 
     ] 
    } 
] 

}

И я хотел бы, чтобы удалить «Продукт 5» Как я могу сделать это с Монго (надеюсь, без цикла и/или делать какие-либо преобразования данных

Я попробовал метод, описанный здесь: how to delete a specific object from array object in MongoDB

здесь Deleting a single object from an array of objects in MongoDB

и здесь Mongodb update operation inside sub array

Я предполагаю, что причина, это не сработало, потому что мой объект является двойной вложенной. Я пытался найти решение, которое я придумал, включая манипуляции с данными, которые я бы предпочел избежать.

Помощь/предложение было бы высоко оценено.

ответ

2

Первый вопрос, на который вы ссылаетесь, - это в основном тот же вопрос. Я не уверен, что вы пробовали, но это будет работать (в оболочке):

db.test.update(
    { 
     "_id" : ObjectId("52892936b996cc760d000002"), 
     'subcategories.subcategory': 'Alpha' 
    }, 
    {$pull: {'subcategories.$.products': {name: 'Product 5'}}}) 

Объект запроса идентифицирует subcategory элемент предназначаться для $pull на products через оператора $.

+0

Но если понимать это правильно, это удалит каждый экземпляр «Продукта 5», который находится внутри подкатегории «Альфа». Это не то, что мне нужно. Я хочу удалить только «Продукт 5», который находится внутри подкатегории «Альфа», которая находится внутри идентификатора объекта «ObjectId» («52892936b996cc760d000002» «.) Как я могу это сделать? Или я ошибаюсь? – WagnerMatosUK

+0

@WagnerMatosUK OK, тогда вам просто нужно добавьте это как еще один запрос. См. обновленный ответ. – JohnnyHK

+0

Спасибо, Джонни! Это сработало как шарм! – WagnerMatosUK

Смежные вопросы