我有一个网站访问的集合,我需要做3个显示访问的图表。第一个图表必须显示每小时划分的选定日期,第二个图表显示每天划分的选定月份,第三个图表显示每月划分的选定年份。我有所有3个案例的查询,但我做了一个直接插入查询的临时日期。对于每种情况,我都需要能够从图表中选择一天,一个月或一年。我必须在我的TS代码中实现这些查询。
我有这样的数据(在集合中):
{
"_id" : ObjectId("5ab111a1646e371568c8cfa1"),
"date" : ISODate("2018-03-20T13:46:30.018Z"),
"__v" : 0
}
现在我展示了我拥有的3个代码:
DAY
db.monitors.aggregate([
{"$match":{
"date":{
"$gte":ISODate("2018-03-22T00:00:00.000Z"), "$lt":ISODate("2018-03-23T00:00:00.000Z")}}
},
{"$group":{
"_id":{
"year":{"$year":"$date"},
"month":{"$month":"$date"},
"dayOfMonth":{"$dayOfMonth":"$date"},
"hour":{"$hour":"$date"}
},
"count":{"$sum":1}
}},
{"$group":{
"_id":{
"year":"$_id.year",
"month":"$_id.month",
"dayOfMonth":"$_id.dayOfMonth"
},
"dailyCount":{"$sum":"$hourlyCount"},
"hourlyData":{"$push":{"hour":"$_id.hour","count":"$count"}}
}}
])
月
db.monitors.aggregate([
{"$match":{
"date":{
"$gte":ISODate("2018-02-01T00:00:00.000Z"), "$lt":ISODate("2018-03-01T00:00:00.000Z")}}
},
{"$group":{
"_id":{
"year":{"$year":"$date"},
"month":{"$month":"$date"},
"dayOfMonth":{"$dayOfMonth":"$date"}
},
"count":{"$sum":1}
}},
{"$group":{
"_id":{
"year":"$_id.year",
"month":"$_id.month",
"dayOfMonth":"$_id.dayOfMonth"
},
"monthlyCount":{"$sum":"$dailyCount"},
"dailyData":{"$push":{"dayOfMonth":"$_id.dayOfMonth","count":"$count"}}
}}
])
YEAR
db.monitors.aggregate([
{"$match":{
"date":{
"$gte":ISODate("2017-01-01T00:00:00.000Z"), "$lt":ISODate("2018-01-01T00:00:00.000Z")}}
},
{"$group":{
"_id":{
"year":{"$year":"$date"},
"month":{"$month":"$date"},
},
"count":{"$sum":1}
}},
{"$group":{
"_id":{
"year":"$_id.year",
"month":"$_id.month",
},
"yearlyCount":{"$sum":"$monthlyCount"},
"monthlyData":{"$push":{"month":"$_id.month","count":"$count"}}
}}
])