あなたは、各group_id
の最新のドキュメントを見つけるために、集約フレームワークで$max
のグループ化機能を使用することができます。グループ化された条件に基づいて完全なドキュメントを取得するには、追加のクエリが必要です。
var results = new Array();
db.groups.aggregate(
// Find documents with latest date for each group_id
{ $group: {
_id: '$group_id',
date: { $max: '$date' },
}},
// Rename _id to group_id, so can use as find criteria
{ $project: {
_id: 0,
group_id:'$_id',
date: '$date'
}}
).result.forEach(function(match) {
// Find matching documents per group and push onto results array
results.push(db.groups.findOne(match));
});
例の結果:
{
"_id" : ObjectId("5096cfb8c24a6fd1a8b68551"),
"group_id" : 1,
"date" : ISODate("2012-11-03T00:00:00Z"),
"foo" : "bar"
}
{
"_id" : ObjectId("5096cfccc24a6fd1a8b68552"),
"group_id" : 2,
"date" : ISODate("2012-11-01T00:00:00Z"),
"foo" : "baz"
}
{
"_id" : ObjectId("5096cfddc24a6fd1a8b68553"),
"group_id" : 3,
"date" : ISODate("2012-11-03T00:00:00Z"),
"foo" : "bat"
}
[あなたは何を試してみました?](http://whathaveyoutried.com) – JohnnyHK
私は、これはあなたが探していたかなりものではありません知っているが、あなたは反復可能性グループIDを使用して次のようにします。 db.foo.find({group_id:n}).sort({date:-1}).limit(1) - 各group_id = nに対して。 これは、指定されたグループidを持つすべてのドキュメントを日付順に並べ替え、最新のものだけを返します。 – Louisa