需要一些帮助来完成此聚合管道

时间:2013-06-29 00:37:08

标签: mongodb

我有一个分析集合,我将查询存储为单个文档。我想计算过去一天(24小时)内发生的查询次数。这是聚合命令:

db.analytics.aggregate([{$group:{_id:{"day":{$dayOfMonth:"$datetime"},"hour":{$hour:"$datetime"}},"count":{$sum:1}}},{$sort:{"_id.day":1,"_id.hour":1}}])

结果如下:

.
.
.
        {
            "_id" : {
                "day" : 17,
                "hour" : 19
            },
            "count" : 8
        },
        {
            "_id" : {
                "day" : 17,
                "hour" : 22
            },
            "count" : 1
        },
        {
            "_id" : {
                "day" : 18,
                "hour" : 0
            },
            "count" : 1
        }
.
.
.

最初,我的计划是添加$limit操作来简单地获取最后24个结果。这是一个很棒的计划,直到你意识到有几个小时没有任何疑问。所以最后24篇文件可以回溯一天以上。我想过使用$match,但我只是不确定如何构建它。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

首先,您需要将当天作为当前日期或该集合中的最新文档获取。然后使用查询指定的日期,如:

db.analytics.aggregate([
    {$project:{datetime:"$datetime",day:{$dayOfMonth:"$datetime"}}},
    {$match:{day:3}},
    {$group:{_id:{"hour":{$hour:"$datetime"}},"count":{$sum:1}}},
    {$sort:{"_id.hour":1}}
]);

其中3是本月的某一天{$ match:{day: 3 }}

这个想法是添加一个日期字段,因此,我们可以通过它进行过滤,然后按小时对文档进行分组并进行排序。