Mongodb 计算按日期范围分组的结果
Mongodb count results grouped by date range
我有这样的文件:
{name: 'doc1', date: "2015-01-01T02:00:12+01:00"},
{name: 'doc2', date: "2015-01-01T03:02:12+01:00"},
{name: 'doc3', date: "2015-01-01T02:17:55+01:00"}
是否可以按时间间隔(例如:15 分钟)计算它们并得到如下结果:
{startDate: "2015-01-01T02:00:12+01:00", count: 15},
{startDate: "2015-01-01T02:15:12+01:00", count: 11},
{startDate: "2015-01-01T02:30:12+01:00", count: 21},
...`
您无法通过这种方式返回 "actual" 日期对象,但您可以获得可用于构造日期对象的时间戳值。我不只是一个简单的日期数学问题:
db.collection.aggregate([
{ "$group":
"_id": {
"$subtract": [
{ "$subtract": [ "$date", new Date("1970-01-01") ] },
{ "$mod": [
{ "$subtract": [ "$date", new Date("1970-01-01") ] },
1000 * 60 * 15
]}
]
},
"count": { "$sum": 1 }
}}
])
用纪元日期减去 "date object" 将得到当前时间戳值作为数字。基本数学是与模数在 15 分钟间隔(1000 英里 * 60 秒 * 15 分钟)的差异。
如果您愿意,实际上 Date Aggregation Operators 也可以拆分日期。同样的情况是这些是数字而不是日期,但您可以从那里的值重新构造一个日期对象。
db.collection.aggregation([
{ "$group": {
"_id": {
"year": { "$year": "$date" },
"month": { "$month": "$date" },
"dayOfMonth": { "$dayOfMonth": "$date" },
"hour": { "$hour" },
"minute": {
"$subtract": [
{ "$minute": "$date" },
{ "$mod": [
{ "$minute": "$date" },
15
]}
]
}
},
"count": { "$sum": 1 }
}}
])
我有这样的文件:
{name: 'doc1', date: "2015-01-01T02:00:12+01:00"},
{name: 'doc2', date: "2015-01-01T03:02:12+01:00"},
{name: 'doc3', date: "2015-01-01T02:17:55+01:00"}
是否可以按时间间隔(例如:15 分钟)计算它们并得到如下结果:
{startDate: "2015-01-01T02:00:12+01:00", count: 15},
{startDate: "2015-01-01T02:15:12+01:00", count: 11},
{startDate: "2015-01-01T02:30:12+01:00", count: 21},
...`
您无法通过这种方式返回 "actual" 日期对象,但您可以获得可用于构造日期对象的时间戳值。我不只是一个简单的日期数学问题:
db.collection.aggregate([
{ "$group":
"_id": {
"$subtract": [
{ "$subtract": [ "$date", new Date("1970-01-01") ] },
{ "$mod": [
{ "$subtract": [ "$date", new Date("1970-01-01") ] },
1000 * 60 * 15
]}
]
},
"count": { "$sum": 1 }
}}
])
用纪元日期减去 "date object" 将得到当前时间戳值作为数字。基本数学是与模数在 15 分钟间隔(1000 英里 * 60 秒 * 15 分钟)的差异。
如果您愿意,实际上 Date Aggregation Operators 也可以拆分日期。同样的情况是这些是数字而不是日期,但您可以从那里的值重新构造一个日期对象。
db.collection.aggregation([
{ "$group": {
"_id": {
"year": { "$year": "$date" },
"month": { "$month": "$date" },
"dayOfMonth": { "$dayOfMonth": "$date" },
"hour": { "$hour" },
"minute": {
"$subtract": [
{ "$minute": "$date" },
{ "$mod": [
{ "$minute": "$date" },
15
]}
]
}
},
"count": { "$sum": 1 }
}}
])