根据 mongoengine/pymongo 中的时间戳按 hours/days/month 求和

sum by hours/days/month based on timestamp in mongoengine/pymongo

起初 - 我是 mongodb 的初学者。所以我有下一个问题。我正在使用如下模型 mongoengine:

class Stats(Document):
    Name = StringField(max_length=250)
    timestamp = LongField(default=mktime(datetime.now().timetuple()))
    count = IntField()
    <some other fields>

我真正想要的是按名称过滤(很清楚)并对字段计数使用聚合运算求和。但我想 计算按 hours/days/months.

分组的记录总和

例如,如果我们有这样的时间戳 [1532970603、1532972103、153293600、1532974500] 的记录,那么 1-2 形成第一组,3-4 形成第二组。

这就是我坚持的地方。我有一些关于按每 n 条记录分组,或者将时间戳除以 3600 的想法 (1 小时 = 3600 秒),但如何使用 mongoengine 实现。或者甚至如何在 管道 中插入一些带有 python 的表达式?

非常感谢任何帮助。

我建议使用 ISO 日期格式并将完整​​日期存储在时间戳中。这是你的模型

class Stats(Document):
    Name = Document.StringField(max_length=250)
    timestamp = Document.DateTime(default=datetime.utcnow()) //ISO time format recommended
    count = Document.FloatField()
    meta = {'strict': False}

现在您可以相应地汇总它们。

Stats.objects.aggregate(
    {
        '$group': {
            '_id': {'year': {$year: '$timestamp'},
                    'month': {$month: '$timestamp'},
                    'day' : {$dayOfMonth: '$timestamp'},
                    'hour': {'$hour: '$timestamp'},
            }
        }
    }
)