Jag förstår vad du säger i och med att du vill matcha det sista elementet i det här fallet eller faktiskt bearbeta matchningen i omvänd ordning. Det finns inget sätt att ändra detta och indexet som är lagrat i positionella
Men du kan ändra din inställning till detta, som standardbeteendet för $push
är att "lägga till" i slutet av arrayen. Men MongoDB 2.6 introducerade en $position
modifierare så att du faktiskt alltid kan "pre-pend" till arrayen vilket betyder att ditt "äldsta" objekt är i slutet.
Ta detta till exempel:
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 }
)
Detta resulterar i ett dokument som är "omvänt" av den normala $push
beteende:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Alternativt kan du använda $sort
modifierare när du uppdaterar dina dokument för att "ordna" elementen så att de blev omvända. Men det kanske inte är det bästa alternativet om duplicerade värden lagras.
Så titta på att lagra dina arrayer "omvänt" om du tänker matcha de "nyaste" objekten "först". För närvarande är det ditt enda sätt att få ditt "match från sist" beteende.