Rozumím tomu, co říkáte, že chcete v tomto případě spárovat poslední prvek nebo ve skutečnosti zpracovat shodu v obráceném pořadí. Toto a index uložený v pozičním
Svůj přístup k tomu ale můžete změnit, protože výchozí chování $push
je "připojit" na konec pole. MongoDB 2.6 však zavedlo $position
modifikátor, takže ve skutečnosti můžete vždy "předpřipojit" pole, což znamená, že vaše "nejstarší" položka je na konci.
Vezměte si například toto:
db.artest.update(
{ "array": { "$in": [5] } },
{ "$push": { "array": { "$each": [5], "$position": 0 } }},
{ "upsert": true }
)
db.artest.update(
{ "array": { "$in": [5] } },
{ "$push": { "array": { "$each": [6], "$position": 0 } }},
{ "upsert": true }
)
Výsledkem je dokument, který je "obráceným" normálním $push
chování:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Případně můžete použít $sort
modifikátor při aktualizaci vašich dokumentů za účelem "uspořádat" prvky tak, aby byly obráceny. Ale to nemusí být nejlepší volba, pokud jsou uloženy duplicitní hodnoty.
Pokud tedy máte v úmyslu "nejnovější" položky "nejprve" uložit, podívejte se na ukládání polí "obráceným způsobem". V současné době je to váš jediný způsob, jak dosáhnout chování „shoda od posledního“.