排序之前做GROUP BY在MongoDB



我有一个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 来限制你的"时间戳"范围,以优化它。

相关内容

  • 没有找到相关文章

最新更新