我有一个mongo数据库的bug跟踪。它包含两个集合:
项目{
"_id": 1,
"name": "My Project"
}
错误
{
"_id": 1,
"project": 1,
"title": "we have a bug",
"timestamp": 1400215183000
}
在仪表板上,我想显示每个项目的最新错误-最多10个。所以基本上,当做GROUP BY "project"
字段时,我需要确保它总是选择最新的错误(通过做"timestamp"
的预排序)。
我不知道如何将排序和分组结合在一起,谢谢。
为了获得每个项目的"最新" bug,同时限制为10个结果:
db.collection.aggregate({
{ "$sort": { "timestamp": -1, "project": 1 } },
{ "$group": {
"_id": "$project",
"bug": {
"$first": {
"_id": "$_id",
"title": "$title",
"timestamp": "$timestamp"
}
}
}},
{ "$limit": 10 }
})
所以排序是通过时间戳和项目(作为优化)完成的,然后你做 $group
和 $limit
。这里的分组只是使用 $first
查看"边界",并且只是返回文档的所有其余部分,您可能需要也可能不需要。
尝试实际使用 $match
来限制你的"时间戳"范围,以优化它。