Sie mischen hier ein paar Methoden, wenn Sie alles in der Aggregationspipeline erledigen können. Ansonsten ist es nur eine Frage der richtigen Reihenfolge:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Sortieren Sie also zuerst nach den neuesten Dokumenten. Gruppieren Sie nach itemId
(Reihenfolge wird für $first beibehalten) und filtern Sie dann mit $match, wenn Sie müssen. Aber Ihre gruppierten Dokumente sind die neuesten.