MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come eseguire query solo sui documenti con l'ultimo timestamp da un gruppo?

Stai mescolando alcuni metodi qui quando puoi fare tutto nella pipeline di aggregazione. Altrimenti si tratta solo di mettere i tuoi passi nell'ordine giusto:

db.collection.aggregate([
    {$sort: { createdOn: -1 }},
    {$group: { _id: "$itemId", 
        createdOn: {$first: "$createdOn"},
        field1: {$first: "$field1" },
        field2: {$first: "$field2" }
    }},
    {$match: { field1: "foo" }}
])

Quindi ordina prima i documenti più recenti. Raggruppa su itemId (l'ordine verrà mantenuto per $first ), quindi filtra con $match se necessario. Ma i tuoi documenti raggruppati saranno gli ultimi.