MongoDB每小时平均数

时间:2018-08-09 06:58:10

标签: database mongodb mongodb-query aggregation-framework aggregate

是否有办法在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}}
)

希望有人可以帮助我。谢谢!

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"}}