Ik begrijp wat je zegt, omdat je in dit geval het laatste element wilt matchen of in feite de match in omgekeerde volgorde wilt verwerken. Er is geen manier om dit te wijzigen en de index die is opgeslagen in de positionele $
operator zal altijd de "eerste" match zijn.
Maar u kunt uw benadering hiervan wijzigen, aangezien het standaardgedrag van $push
is om "toe te voegen" aan het einde van de array. Maar MongoDB 2.6 introduceerde een $position
modifier zodat u in feite altijd kunt "pre-pend" naar de array, wat betekent dat uw "oudste" item aan het einde staat.
Neem dit bijvoorbeeld:
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 }
)
Dit resulteert in een document dat het "omgekeerde" is van de normale $push
gedrag:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Als alternatief kunt u de $sort
modifier bij het bijwerken van uw documenten om de elementen te "ordenen" zodat ze omgekeerd waren. Maar dat is misschien niet de beste optie als dubbele waarden worden opgeslagen.
Dus kijk naar het opslaan van uw arrays in "reverse" als u van plan bent om de "nieuwste" items "eerst" te matchen. Momenteel is dat de enige manier om je "match van laatste"-gedrag te krijgen.