我有这样的对象
http://localhost/newscafe.pk/news-show/78/some-non-English-word
显示访问次数。
我想做一个图表,在选定的一天,显示每小时的访问次数。所以我需要提取每小时特定日期的数据。 我有这个
fillna
这会划分每天和每小时的所有访问次数,但我每小时只需要一个特定日期。
答案 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}}}
])