Du blandar några metoder här när du kan göra allt i aggregeringspipelinen. Annars är det bara att få stegen i rätt ordning:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Så sortera först efter de senaste dokumenten. Gruppera på itemId
( Beställningen kommer att bibehållas för $first ), och filtrera sedan med $match om du måste. Men dina grupperade dokument kommer att vara de senaste.