我有一个聚合管道,该管道按最近24小时排序。 Json输出通常如下所示:
[{"_id": {"day": 28, "hour": 23}, "count": 2},
但是,因为今天是本月的第一天,所以它混在一起了,并且上面的json是“最新的”,而所有包含“ day”:1的内容都排在最后。
我认为我通过在查询中添加“ month”来解决此问题,但是只是为了确保这是对聚合进行排序的正确方法?
pipeline = [
{
"$project": {
"_id": 1,
"mac": 1,
"time": 1
}
},
{"$match": {"time": {"$gt": timenow-timedelta(hours=24)}}},
{"$group": {
"_id": {
'month': {"$month": {"date": '$time', "timezone": 'Africa/Johannesburg'}},
'day': {"$dayOfMonth": {"date": '$time', "timezone": 'Africa/Johannesburg'}},
'hour': {"$hour": {"date": '$time', "timezone": 'Africa/Johannesburg'}},
'mac': {'_id': "$mac"}
},
"count": {"$sum": 1}
}},
{
"$group": {
"_id": {
'month':"$_id.month",
'day': "$_id.day",
'hour': "$_id.hour",
},
"count": {"$sum": 1}
}
},
{"$sort": SON([("_id", -1)])}
]