Вие смесвате няколко метода тук, когато можете да правите всичко в тръбопровода за агрегиране. В противен случай е просто да подредите стъпките си в правилния ред:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Така че сортирайте първо за най-новите документи. Групирайте по itemId
(редът ще се поддържа за $first) и след това филтрирайте с $match, ако трябва. Но вашите групирани документи ще бъдат най-новите.