MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Objeto de atualização do MongoDb em uma matriz na primeira ocorrência da última


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".