Jeg forstår, hvad du siger, i og med at du ønsker at matche det sidste element i dette tilfælde eller faktisk behandle kampen i omvendt rækkefølge. Der er ingen måde at ændre dette og indekset gemt i positionelle $
operatør vil altid være det "første" match.
Men du kan ændre din tilgang til dette, som standardadfærden for $push
er at "tilføje" til slutningen af arrayet. Men MongoDB 2.6 introducerede en $position
modifikator, så du faktisk altid kan "pre-pendere" til arrayet, hvilket betyder, at dit "ældste" element er i slutningen.
Tag dette for eksempel:
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 }
)
Dette resulterer i et dokument, der er "omvendt" af den normale $push
adfærd:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Alternativt kan du anvende $sort
modifikator, når du opdaterer dine dokumenter for at "ordne" elementerne, så de blev omvendt. Men det er måske ikke den bedste mulighed, hvis duplikerede værdier er gemt.
Så prøv at gemme dine arrays "omvendt", hvis du har til hensigt at matche de "nyeste" elementer "først". I øjeblikket er det din eneste måde at få din "match fra sidst"-adfærd på.