Вот еще один способ, чтобы переместить элемент в новое положение, которое поменяет позицию IT2 и IT3 ...
Удалить элемент из массива используя $ pull [ Docs Here ].
update({"name": "myDoc"}, {$pull: {"items" : "it3"}});
Вставьте элемент в новое положение, используя $ push. [ Docs Here ].
update({"name": "myDoc"}, {
$push: {
"items" : { $each : [ "it3" ], $position : 1 }
}
});
Когда использовать
ответ Pouzor, чтобы использовать $ набор может быть проще и лучше для многих случаев применения.
Однако, если несколько пользователей одновременно добавляют, удаляют и перенастраивают элементы массива, этот метод означает, что вы не будете перезаписывать изменения друг друга.
В некоторых случаях это может быть более эффективным (например, большие элементы массива), поскольку записывается меньше данных.
GOTCHA: Список списков
Если список вы переназначения массив массивов, которые необходимо использовать $ все оператора с $ тянуть [ Docs Here ]
Возьмем такой пример:
{
name: "myDoc",
items: [
[ "User", "dofij20r91dj93" ],
[ "User", "239vjvidjfsldf" ],
[ "User", "2309jvdsjdkk23" ]
]
}
Код -, чтобы удалить первый список из списка списков:
update({"name": "myDoc"}, {
$pull: {
"items" : {
$all : [ "User", "dofij20r91dj93" ] // the sub-list to $pull
}
}
});
Список объектов
Это легко. Скажем, у вас есть следующий список объектов:
{
name: "myDoc",
items: [
{ type: "User", id: "dofij20r91dj93", name: "Dave" },
{ type: "Group", id: "239vjvidjfsldf", name: "Accountants" },
{ type: "User", id: "2309jvdsjdkk23", name: "Toni" }
]
}
Вы можете $ тянуть, как это:
update({"name": "myDoc"}, {
$pull: {
"items" : { type: "User", id: "dofij20r91dj93" }
}
});
Нет, это не способ сделать это в одном шаге. Http: //docs.mongodb.орг/ручной/ссылки/оператора/# операторы. На самом деле даже нет способа вставить элемент в определенный индекс. Это нерешенная/открытая проблема: https://jira.mongodb.org/browse/SERVER-2363. Вам нужно будет переписать весь список массивов. – WiredPrairie
Как вы думаете, что будет лучше для этого? –
UPDATE: начиная с версии 2.6.you вставить в определенный индекс, используя $ position - https://docs.mongodb.org/manual/reference/operator/update/position/ –