我想知道执行以下操作的最佳方法是什么。
我像日志一样存储一个人在 Mongodb 中所做的事情的数据
例如
{
"date":"01-01-2002T08:20:30",
"task":"contact-lead",
"user":"username"
}
我需要计算当天完成了多少任务,并将它们放在像 Highstock 这样的图表中。
我想知道执行以下操作的最佳方法是什么。
我像日志一样存储一个人在 Mongodb 中所做的事情的数据
例如
{
"date":"01-01-2002T08:20:30",
"task":"contact-lead",
"user":"username"
}
我需要计算当天完成了多少任务,并将它们放在像 Highstock 这样的图表中。
下面的命令将汇总/计算每天的任务数:
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并定期更新聚合集合并将其用作图形的源。
使用 PHP 或 Python 之类的服务器端脚本使用 mongodb 查询来聚合您的数据。
如果您需要查找过去 30 天完成的任务数,执行 30 个查询不是一个好主意,而不是您必须使用 mongodb 的“group by”sql 等效项,该技术称为“ map reduce ” '。
然后,您可以根据图表库 Highcharts 的要求,在网页上使用 PHP/Python 以 json/xml 格式呈现图表数据(或者您也可以尝试jqplot.com获取基于 jQuery 的图表)。