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

Como consultar apenas documentos com o carimbo de data/hora mais recente de um grupo?


Você está misturando alguns métodos aqui quando pode fazer tudo no pipeline de agregação. Caso contrário, é apenas uma questão de colocar seus passos na ordem certa:
db.collection.aggregate([
    {$sort: { createdOn: -1 }},
    {$group: { _id: "$itemId", 
        createdOn: {$first: "$createdOn"},
        field1: {$first: "$field1" },
        field2: {$first: "$field2" }
    }},
    {$match: { field1: "foo" }}
])

Portanto, classifique primeiro os documentos mais recentes. Agrupe no itemId ( a ordem será mantida por $first ) e, em seguida, filtre com $match se for necessário. Mas seus documentos agrupados serão os mais recentes.