0

我想知道执行以下操作的最佳方法是什么。

我像日志一样存储一个人在 Mongodb 中所做的事情的数据

例如

{
 "date":"01-01-2002T08:20:30",
 "task":"contact-lead",
 "user":"username"
}

我需要计算当天完成了多少任务,并将它们放在像 Highstock 这样的图表中

4

2 回答 2

2

下面的命令将汇总/计算每天的任务数:

db.col.group({
    $keyf : function(doc) {
        return { "day" : doc.date.getFullYear() + "/" + (doc.date.getMonth()+1) + "/" + doc.date.getDate() };
    },
    initial: {count:0},
    reduce: function(obj, prev) { prev.count++; }
})

然后,您只需在需要时对其进行格式化并将其发送到 highcharts API,但要小心,因为如果您有大量数据可能会很慢。

另一种选择是使用MapReduce并定期更新聚合集合并将其用作图形的源。

于 2012-07-12T06:34:55.373 回答
0
  1. 使用 PHP 或 Python 之类的服务器端脚本使用 mongodb 查询来聚合您的数据。

  2. count() , $where , $gte ,$gt将是您可以用来查询在第 x 天完成的任务总数的运算符。

  3. 如果您需要查找过去 30 天完成的任务数,执行 30 个查询不是一个好主意,而不是您必须使用 mongodb 的“group by”sql 等效项,该技术称为“ map reduce ” '。

然后,您可以根据图表库 Highcharts 的要求,在网页上使用 PHP/Python 以 json/xml 格式呈现图表数据(或者您也可以尝试jqplot.com获取基于 jQuery 的图表)。

于 2012-07-12T06:06:17.590 回答