Как удалить встроенный документ в MongoDB? - PullRequest
1 голос
/ 15 февраля 2012

У меня есть документ, который выглядит следующим образом:

{listName: 'LoremIpsum'
 listItems: [{productDescription: "", productImage: ""}...]}

Как мне удалить элемент из listItems, если productImage не существует?

Я пыталсябез результата:

db.lists.update({"item.productImage":{$exists: false}}, {$unset:{"item":1}}, false, true )

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Обратите внимание, что $ pull может содержать критерии соответствия элементов.Таким образом, это единственное обновление удалит элементы, которые не содержат поле «productImage»:

db.lists.update({}, {$pull:{listItems:{productImage:{$exists:false}}}}, false, true)
0 голосов
/ 15 февраля 2012

Вы сможете использовать оператор $ pull , который удалит все с указанным вами критерием соответствия.

db.lists.update({}, {"$pull": {"listItems" : {"productImage" : {$exists: false}} }})

0 голосов
/ 15 февраля 2012

Кажется, вы не можете удалить его за один шаг.Но вот двухступенчатая комбинация:

// unset matching array element. That'll leave null on its place
db.lists.update({"listItems.productImage":{$exists: false}}, 
                {$unset:{"listItems.$":1}});

// remove nulls from array
db.lists.update({listItems: null}, 
                {$pull: {listItems: null}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...