统计数据方案

时间:2014-02-08 10:02:59

标签: mongodb statistics aggregation-framework

我将收集大量统计数据并计算一些值(如流行度)。之后我需要将其显示为图形。我读了this article,我的任务看起来很简单:每天创建文档,按照文章中的描述存储数据。当我需要在过去3天内获得最受欢迎的值时,我将只使用聚合框架。很简单....

但在这种情况下,如何才能获得过去24小时内最受欢迎的值?我可以过滤最近2天的文件,但它!=过去24小时......

上述方案是否可以在日期范围内灵活变通?

加入:

以下数据结构使用单个文档存储一整天的信息:

{
    _id: "20101010/site-1/apache_pb.gif",
    metadata: {
        date: ISODate("2000-10-10T00:00:00Z"),
        site: "site-1",
        page: "/apache_pb.gif" },
    daily: 5468426,
    hourly: {
        "0": 227850,
        "1": 210231,
        ...
        "23": 20457 },
    minute: {
        "0": 3612,
        "1": 3241,
        ...
        "1439": 2819 }
}

使用聚合框架我可以选择上周的文档(最多7个),按metadata.site分组和总和daily以获得网站的总访问量。是否可以使用上述方案计算过去24小时内网站的总访问次数?

(创建by hour文档有一种简单的方法,但由于性能原因,我不想这样做)

1 个答案:

答案 0 :(得分:0)

您仍然可以保留相同的架构,您只需要更改查询。

而不是在sum上执行daily,而只需在结果中投放 daily。因为在这种情况下您不必进行任何聚合,所以您甚至不必使用聚合框架,并且您的查询变得非常简单。以下是仅返回计数的新查询的示例:

db.coll.find({date: {$gt: ISODate("2000-10-10T00:00:00Z"),
                     $lt: ISODate("2000-10-11T00:00:00Z")}},
             {"daily": 1, "_id": 0});