根据 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'},
}
}
}
)
起初 - 我是 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'},
}
}
}
)