Je comprends ce que vous dites en ce que vous voulez faire correspondre le dernier élément dans ce cas ou en fait traiter la correspondance dans l'ordre inverse. Il n'y a aucun moyen de modifier cela et l'index stocké dans le positionnel $
sera toujours la "première" correspondance.
Mais vous pouvez modifier votre approche, car le comportement par défaut de $push
consiste à "ajouter" à la fin du tableau. Mais MongoDB 2.6 a introduit un $position
modificateur afin que vous puissiez en fait toujours "pré-pendre" au tableau, ce qui signifie que votre élément "le plus ancien" est à la fin.
Prenons ceci par exemple :
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 }
)
Il en résulte un document qui est "l'inverse" du $push
normal comportement :
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Vous pouvez également appliquer le $sort
modificateur lors de la mise à jour de vos documents afin "d'ordonner" les éléments afin qu'ils soient inversés. Mais ce n'est peut-être pas la meilleure option si des valeurs en double sont stockées.
Pensez donc à stocker vos tableaux en "inverse" si vous avez l'intention de faire correspondre les éléments "les plus récents" "en premier". Actuellement, c'est votre seul moyen d'obtenir votre comportement de "correspondance depuis le dernier".