数据库结构
date: 2022-01-01T03:28:00.000+00:00 (Date)
value: XXX (int)
编写一个查询,按年、月、日对文档进行分组,并对相对值求和
filter_cond = {"$match": {"dt": {"$gte": datetime.fromisoformat(dt_from), "$lte": datetime.fromisoformat(dt_upto)}}}
if group_type == 'year' or group_type == 'month':
group_cond = {"$group": {"_id": {"period": {f"${group_type}": "$dt"}}, "total_value": {"$sum": 1}}}
elif group_type == 'day':
group_cond = {"$group": {"_id": {f"${group_type}OfMonth": "$dt"}, "total_value": {"$sum": "$value"}}}
sort_cond = {"$sort": {"_id": 1}}
pipeline = coll.aggregate([filter_cond, group_cond, sort_cond])
输出格式
例如:
month: 2022-11-01T00:00:00
total: XXX
使用:pymongo
在
$dateTrunc
中将
unit: "day"
与
$group
一起使用
db.collection.aggregate([
{
"$group": {
"_id": {
$dateTrunc: {
date: "$date",
unit: "day"
}
},
"total": {
"$sum": "$value"
}
}
}
])