Eu entendo o que você está dizendo que deseja corresponder ao último elemento neste caso ou, de fato, processar a correspondência na ordem inversa. Não há como modificar isso e o índice armazenado no
$
operador será sempre a "primeira" correspondência. Mas você pode mudar sua abordagem para isso, pois o comportamento padrão de
$push
é "anexar" ao final da matriz. Mas o MongoDB 2.6 introduziu um $position
modificador para que você possa sempre "pré-pender" ao array, o que significa que seu item "mais antigo" está no final. Tome isso por exemplo:
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 }
)
Isso resulta em um documento que é o "reverso" do
$push
normal comportamento:{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }
Como alternativa, você pode aplicar o
$sort
modificador ao atualizar seus documentos para "ordenar" os elementos para que fossem invertidos. Mas essa pode não ser a melhor opção se forem armazenados valores duplicados. Portanto, procure armazenar seus arrays em "reverso" se você pretende combinar os itens "mais novos" "primeiro". Atualmente, essa é a única maneira de obter seu comportamento de "correspondência do último".