Comprendo ciò che stai dicendo in quanto desideri abbinare l'ultimo elemento in questo caso o effettivamente elaborare la corrispondenza in ordine inverso. Non è possibile modificare questo e l'indice archiviato nel posizionale $
l'operatore sarà sempre la "prima" corrispondenza.
Ma puoi cambiare il tuo approccio a questo, come il comportamento predefinito di $push
è "aggiungere" alla fine dell'array. Ma MongoDB 2.6 ha introdotto un $position
modificatore in modo da poter sempre "anteporre" all'array, il che significa che il tuo elemento "più vecchio" è alla fine.
Prendi questo ad esempio:
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 }
)
Ciò si traduce in un documento che è il "rovescio" del normale $push
comportamento:
{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
In alternativa puoi applicare il $sort
modificatore durante l'aggiornamento dei documenti per "ordinare" gli elementi in modo che fossero invertiti. Ma potrebbe non essere l'opzione migliore se vengono archiviati valori duplicati.
Quindi cerca di memorizzare i tuoi array in "reverse" se intendi abbinare "prima" gli elementi "più recenti". Attualmente questo è l'unico modo per ottenere il tuo comportamento "corrispondenza dall'ultimo".