MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment interroger uniquement les documents avec le dernier horodatage d'un groupe ?

Vous mélangez ici quelques méthodes alors que vous pouvez tout faire dans le pipeline d'agrégation. Sinon, c'est juste une question de mettre vos pas dans le bon ordre :

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

Triez donc d'abord les documents les plus récents. Grouper sur itemId ( l'ordre sera maintenu pour $first ), puis filtrez avec $match si vous le devez. Mais vos documents groupés seront les derniers.