如何提取每小时划分的特定日期的数据[MongoDB]?

时间:2018-03-27 13:45:54

标签: mongodb mongodb-query aggregation-framework

我有这样的对象

http://localhost/newscafe.pk/news-show/78/some-non-English-word

显示访问次数。

我想做一个图表,在选定的一天,显示每小时的访问次数。所以我需要提取每小时特定日期的数据。 我有这个

fillna

这会划分每天和每小时的所有访问次数,但我每小时只需要一个特定日期。

2 个答案:

答案 0 :(得分:1)

您已拥有全天输出所有访问次数的所有汇总代码。您可以在管道的开头添加匹配阶段,以将聚合限制为特定日期。

像mongo shell中的东西

{$match:{date:{$gte:ISODate("2018-03-22T00:00:00.000Z"), $lt:ISODate("2018-03-22T11:59:59.999Z")}}}

对于汇总月份,您只需要延长日期范围,即3月份。

 {$match:{date:{$gte:ISODate("2018-03-01T00:00:00.000Z"), $lt:ISODate("2018-03-31T11:59:59.999Z")}}}

并将查询重写到下面。

{"$group":{
    "_id":{
      "year":{"$year":"$date"},
      "dayOfMonth":{"$dayOfMonth":"$date"}
    },
    "count":{"$sum":1}
  }},

  {"$group":{
    "_id":{
      "year":"$_id.year"
    },
    "monthlyCount":{"$sum":"$count"},
    "dailyData":{"$push":{"day":"$_id.dayOfMonth","count":"$count"}}
  }}

答案 1 :(得分:1)

我已经尝试过这种方式来精确定位到特定的日期。

// If your specific date is 20-03-2018
var DAY = 20;
var MONTH = 03;
var YEAR = 2018;
db.checkDate.aggregate([
  {$project: {day: {$dayOfMonth: "$date"}, month: {$month: "$date"}, year: 
    {$year: "$date"},hour: {$hour: "$date"}}},
  {$match: { day: DAY, month: MONTH, year: YEAR}},
  {$group: { _id: {hour: "$hour"}, visits: {$sum: 1}}}
])