Mieszasz tutaj kilka metod, kiedy możesz robić wszystko w potoku agregacji. W przeciwnym razie wystarczy postawić kroki we właściwej kolejności:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Więc najpierw posortuj najnowsze dokumenty. Grupuj na itemId
(zamówienie będzie utrzymywane najpierw dla $), a następnie filtruj za pomocą $match, jeśli musisz. Ale Twoje zgrupowane dokumenty będą najnowszymi.