Ответ 1
Нет, к сожалению, то, что вы делаете, в настоящее время является лучшим вариантом. Посмотрите на этот вопрос: В mongoDb, как вы удаляете элемент массива по его индексу, который ссылается на Jira для этой самой проблемы.
Например, у меня есть документ
db.test.save({_id: 1, list:[
{key: "a"},
{key: "b"},
{key: "c"},
{key: "d"},
{key: "e"}
]})
и мне нужно удалить второй элемент из списка. Пока я делаю это в два этапа. Прежде всего, я отключил второй элемент списка, но оператор unset не удаляет элемент, он будет null, после чего я вытаскиваю любое значение с нулевым значением из поля списка
db.test.update({_id: 1}, {$unset: {"list.2": 1}})
db.test.update({_id: 1}, {$pull: {list: null}})
Я хочу спросить, есть ли решение сделать это за одну операцию?
Нет, к сожалению, то, что вы делаете, в настоящее время является лучшим вариантом. Посмотрите на этот вопрос: В mongoDb, как вы удаляете элемент массива по его индексу, который ссылается на Jira для этой самой проблемы.
если вы знаете значение, которое вы хотите удалить
db.test.update({{_id: 1},{"$pull" : {"list" : { "key" : "c"}}},false,false)
больше информации на
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
Не в настоящее время. Как было сказано в Нет прямого способа вытягивания/удаления по индексу массива.
Существует открытая проблема с этой операцией, хотя это обходное решение в порядке, несмотря на то, что это не атомное решение.