首页 > 解决方案 > 在 MongoDB 中聚合过去 n 天

问题描述

我正在尝试在 MongoDb 中构建一个查询(与 pymongo 一起运行),以获取过去 30 天的分组总和。我真的很难将聚合函数和日期差异结合起来。查询的 SQL 等效项将是:

SELECT item, sum(volume) from table
where date >= DATEADD(DAY, -30, now())
group by item

任何人都可以帮忙吗?

标签: mongodbpymongo

解决方案


这很简单,首先您要通过日期字段匹配匹配的文档,然后用于$group计算总和。

首先我们需要的代码:

import pymongo
from datetime import date, timedelta, datetime

connection = pymongo.MongoClient("connection url")
collection = connection["db_name"]['collection_name']

主要聚合:

thirty_days_ago = date.today() - timedelta(days=30)
results = list(collection.aggregate([
    {
        "$match": {
            "date": {"$gt": thirty_days_ago }
        }
    },
    {
        "$group": {
            "_id": "item",
            "sum": {"$sum": "$volume"}
        }
    }
]))

我不得不猜测一些字段名称,因为您没有提供架构,但您应该能够轻松地根据您的需要调整它。


推荐阅读