是否有办法在MongoDB的日期范围内获取每小时平均门票的数量?
这是我的记录示例:
{
"_id" : ObjectId("5a8e2f423c2df300143de0f8"),
"ticket_number" : 58,
"name" : "Test Name",
"fb_id" : "1777532692279135",
"inquiry" : "sample",
"inquiry_date" : ISODate("2018-02-22T02:47:30.272Z"),
"status" : "CLOSED",
"__v" : 0,
"assessment" : " sample",
"assessed_by_name" : "Test Admin",
"assessment_date" : "2018-02-22T02:48:17+00:00"
}
这是我的代码,每小时计算票数,但似乎不起作用:
db.tickets.aggregate(
{$match:{inquiry_date:{$gte: ISODate("2018-01-01T03:20:42.079Z"), $lt: ISODate("2018-04-25T03:20:42.079Z")}}},
{$group:{ _id : { ticket_number: "$ticket_number", inquiry_date: "$hour" }, perHour: {$sum: "$count"} } },
{$sort:{perHour:-1}}
)
希望有人可以帮助我。谢谢!
答案 0 :(得分:0)
您可以在3.6中使用以下汇总。
mulit级别$group
用于获取所有文档的计数和平均值,然后是$concatArrays
以将数据与平均值文档合并,并且$unwind
和$replaceRoot
可以将合并文档升级为顶部。
{"$group":{"_id":{"$hour":"$inquiry_date"},"perHour":{"$sum":1}}},
{"$group":{"_id":"average","data":{"$push":{"Hour":"$_id","perHour":"$perHour"}},"ave":{"$avg":"$perHour"}}},
{"$project":{"all":{"$concatArrays":["$data",[{"ave":"$ave"}]]}},
{"$unwind":"$all"}
{"$replaceRoot":{"newRoot":"$all"}}