集約パイプラインですべてを実行できる場合は、ここでいくつかの方法を混合しています。それ以外の場合は、正しい順序で手順を実行するだけです。
db.collection.aggregate([
{$sort: { createdOn: -1 }},
{$group: { _id: "$itemId",
createdOn: {$first: "$createdOn"},
field1: {$first: "$field1" },
field2: {$first: "$field2" }
}},
{$match: { field1: "foo" }}
])
したがって、最初に最新のドキュメントを並べ替えます。 itemId
でグループ化する (順序は$ firstで維持されます)、必要に応じて$matchでフィルタリングします。ただし、グループ化されたドキュメントは最新のものになります。