Je combineert hier een paar methoden terwijl je alles in de aggregatiepijplijn kunt doen. Anders is het gewoon een kwestie van je stappen in de juiste volgorde zetten:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Sorteer dus eerst op de nieuwste documenten. Groeperen op de itemId
( bestelling wordt gehandhaafd voor $first ), en filter vervolgens met $match als dat moet. Maar uw gegroepeerde documenten zijn de nieuwste.