【问题标题】:MongoDB average number per hourMongoDB平均每小时数量
【发布时间】:2018-08-09 06:58:10
【问题描述】:

有没有办法在 MongoDB 的日期范围内获取每小时平均 tickets 计数?

这是我的记录示例:

{
  "_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}}
)

希望有人可以在这方面帮助我。谢谢!

【问题讨论】:

  • 你想要什么样的输出?
  • 只有_id(这是强制性的)和平均@AnthonyWinzlet
  • 试试{$group:{ _id : { ticket_number: "$ticket_number", inquiry_hour: {"$hour": "$inquiry_date"}}, perHour: {$sum: "$count"} } },
  • perHour 似乎对我不起作用。还有其他方法可以每小时计算门票吗?我试过perHour: { $sum:1 }@Veeram
  • 我不明白为什么它不起作用。您是否包含inquiry_hour: {"$hour": "$inquiry_date"} 部分?

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


【解决方案1】:

您可以在 3.6 中使用以下聚合。

多级 $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"}}

【讨论】:

  • 最后一个问题,是否可以只包含指定日期范围内的数据?我尝试添加{$match:{inquiry_date:{$gte: ISODate("2018-01-01T03:20:42.079Z"), $lt: ISODate("2018-04-25T03:20:42.079Z")}}},,但它破坏了结果
  • 对我来说很合适。你能解释一下什么不适合你吗?
  • 当我添加 $match 时,它会返回多个以小时为 id 的文档,而不是返回 1 个具有调整后平均值的文档(因为日期范围)
  • 你能告诉我预期的反应吗?你希望回复是{"1":{perHour:2}, "2":{perHour:3} .... ,"avg":4} 吗?
  • 预期响应将与您发布的解决方案的响应相同。 { "_id" : "average", "data" : [ { "Hour" : 12, "perHour" : 1.0 }, { "Hour" : 17, "perHour" : 2.0 }, { "Hour" : 9, "perHour" : 6.0 } ], "ave" : 3 }。我只是想在查询中添加一个日期范围。
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多