在 MongoDB 按年月日分组查询中苦苦挣扎

问题描述 投票:0回答:1

数据库结构

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

mongodb mongodb-query aggregation-framework pymongo
1个回答
0
投票

$dateTrunc
 中将 
unit: "day"
$group

一起使用
db.collection.aggregate([
  {
    "$group": {
      "_id": {
        $dateTrunc: {
          date: "$date",
          unit: "day"
        }
      },
      "total": {
        "$sum": "$value"
      }
    }
  }
])

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.