我将收集大量统计数据并计算一些值(如流行度)。之后我需要将其显示为图形。我读了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
文档有一种简单的方法,但由于性能原因,我不想这样做)
答案 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});