Zde mícháte několik metod, když můžete dělat všechno v agregačním potrubí. Jinak jde jen o to, aby vaše kroky byly ve správném pořadí:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Nejprve tedy seřaďte nejnovější dokumenty. Seskupit podle itemId
( objednávka bude zachována pro $first ) a poté filtrujte pomocí $match, pokud musíte. Vaše seskupené dokumenty však budou nejnovější.