Как удалить n-й элемент массива в mongodb - PullRequest
18 голосов
/ 29 августа 2011

Например, у меня есть документ

db.test.save({_id: 1, list:[
    {key: "a"},
    {key: "b"},
    {key: "c"},
    {key: "d"},
    {key: "e"}
]})

и мне нужно удалить второй элемент из списка. Сейчас я делаю это в два этапа. Во-первых, я сбрасываю второй элемент списка, но оператор unset не удаляет элемент, он будет нулевым, после чего я вытаскиваю любое обнуляемое значение из поля списка

db.test.update({_id: 1}, {$unset: {"list.2": 1}})
db.test.update({_id: 1}, {$pull: {list: null}})

Я хочу спросить, есть ли решение сделать это за одну операцию?

Ответы [ 3 ]

8 голосов
/ 29 августа 2011

Нет, к сожалению, то, что вы делаете, в настоящее время является лучшим вариантом.Посмотрите на этот вопрос: В mongoDb, как вы удаляете элемент массива по его индексу , который ссылается на Jira для этой самой проблемы.

3 голосов
/ 29 августа 2011

, если вы знаете значение, которое хотите удалить

db.test.update({{_id: 1},{"$pull" : {"list" : { "key" : "c"}}},false,false)

Более подробная информация на

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

0 голосов
/ 02 ноября 2015

Не в настоящее время.Как было сказано в Не существует прямого способа извлечения / удаления по индексу массива .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...