Разбирам какво казвате, че искате да съпоставите последния елемент в този случай или всъщност да обработите съвпадението в обратен ред. Няма начин да промените това и индекса, съхранен в позиционния $
винаги ще бъде "първото" съвпадение.
Но можете да промените подхода си към това, като поведението по подразбиране на $push
е да "добавя" към края на масива. Но MongoDB 2.6 въведе $position
модификатор, за да можете всъщност винаги да "предварително добавяте" към масива, което означава, че вашият "най-стар" елемент е в края.
Вземете това например:
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 }
)
Това води до документ, който е „обратен“ на нормалния $push
поведение:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Като алтернатива можете да приложите $sort
модификатор, когато актуализирате вашите документи, за да "подредите" елементите, така че да бъдат обърнати. Но това може да не е най-добрият вариант, ако се съхраняват дублирани стойности.
Така че помислете за съхраняването на вашите масиви в "обратен ред", ако възнамерявате да съпоставите "най-новите" елементи "първо". Понастоящем това е единственият ви начин да получите поведението си „съвпадение от последното“.