Я хотел бы добавить push в начале моего набора, а не добавлять его до конца, когда я нажимаю mongo $.
Можно ли сделать обновление атомарного push, которое добавляет элементы как первые, а не последние?
Обновление 2014: да, вы можете.
Я хотел бы добавить push в начале моего набора, а не добавлять его до конца, когда я нажимаю mongo $.
Можно ли сделать обновление атомарного push, которое добавляет элементы как первые, а не последние?
Обновление 2014: да, вы можете.
Как и в MongoDB v2.5.3, есть новый оператор $position
, который вы можете включить вместе с оператором $each
как часть вашего запроса $push
, чтобы указать местоположение в массиве, в котором вы хотели бы вставьте значение.
Вот пример страницы документа, чтобы добавить элементы 20 и 30 в индекс массива 2::
db.students.update( { _id: 1 },
{ $push: { scores: {
$each: [ 20, 30 ],
$position: 2
}
}
}
)
Ссылка: http://docs.mongodb.org/master/reference/operator/update/position/#up._S_position
Используйте отрицательный индекс с $set for prepend, проверенный в mongo v2.2:
> db.test.insert({'array': [4, 5, 6]})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 4, 5, 6 ] }
//prepend 3
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")},
{'$set': {'array.-1': 3}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 3, 4, 5, 6 ] }
//prepend 2
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")},
{'$set': {'array.-1': 2}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 2, 3, 4, 5, 6 ] }
//prepend 1
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")},
{'$set': {'array.-1': 1}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
"array" : [ 1, 2, 3, 4, 5, 6 ] }
Аналогичный вопрос был задан несколько дней назад. К сожалению, короткий ответ: "нет", но есть открытый запрос для этой функции.
https://jira.mongodb.org/browse/SERVER-2191 - "$push() перед массивом"
В другом потоке есть дополнительная информация, а также возможная работа: "Использовать массив MongoDB как стек" - Использовать массив MongoDB как стек
Надеемся, что приведенное выше будет полезно и поможет вам найти приемлемую рабочую среду.