Está mezclando algunos métodos aquí cuando puede hacer todo en la canalización de agregación. De lo contrario, solo es cuestión de dar los pasos en el orden correcto:
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
Así que ordene primero los documentos más nuevos. Grupo en el itemId
(el pedido se mantendrá para $first), y luego filtre con $match si es necesario. Pero sus documentos agrupados serán los más recientes.