Как добавить значение в начало массива в mongodb? - PullRequest
6 голосов
/ 29 октября 2011

как мне добавить значение в начало массива в mongodb?

сказать, что у меня есть этот документ в моей коллекции монго:

{ "colors" : [ "red", "green", "blue" ] }

как мне добавить "желтый"в начало списка?

когда я сделаю:

{$push:{colors:"yellow"}}

я бы получил это:

{ "colors" : [ "red", "green", "blue", "yellow" ] }

я хочу это:

{ "colors" : [ "yellow", "red", "green", "blue"] }

спасибо заранее!

Ответы [ 2 ]

21 голосов
/ 09 сентября 2014

Для любого новичка в этом MongoDB 2.6+ поддерживает оператор $position , который можно использовать для достижения желаемого эффекта. Преимущество в том, что вам не нужно возвращать весь массив документов, обновлять его локально и сохранять - оператор $position означает, что все можно сделать атомарно.

Вам необходимо использовать его вместе с $each:

$push: { colors: { $each: ['yellow'], $position: 0 } }
4 голосов
/ 29 октября 2011

«unshift» вставляет данные в начало массива, тогда как «push» вставляет их в конец. например в JavaScript:

> a = ['red','green','blue']
[ "red", "green", "blue" ]
> a.unshift("yellow")
4
> a
[ "yellow", "red", "green", "blue" ]

Но, к сожалению, это не поддерживается API Mongo как элементарная операция:

http://www.mongodb.org/display/DOCS/Updating

просто поддерживает "push"


Насколько велик ваш массив?

вы можете предположить, что ваш массив в Mongo всегда хранится в обратном порядке, и использовать push, или вы можете считывать массив, изменять его с помощью unshift, а затем сохранять его снова (хотя это не будет атомарно)

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