我有一个用于bug跟踪的mongo数据库。它包含2个集合:
项目
{
"_id": 1,
"name": "My Project"
}
错误
{
"_id": 1,
"project": 1,
"title": "we have a bug",
"timestamp": 1400215183000
}
在仪表板上,我想显示每个项目的最新错误 - 最多总共10个。
所以基本上,在执行 GROUP BY "project"
字段时,我需要确保它始终选择最新的错误(通过"timestamp"
进行预排序)。
我不确定如何将排序和分组结合在一起,谢谢。
答案 0 :(得分:2)
为了获得"最新的"每个项目的错误,同时限制为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
进行范围优化。