【发布时间】:2015-09-10 16:08:35
【问题描述】:
我正在尝试通过将日期时间减少到几小时来聚合记录。有没有办法在 mongoengine 中做到这一点并保存字段类型?
我的数据是:
{'spent': 7, 'time_started': datetime.datetime(2015, 4, 21, 16, 2, 16, 661000)}
{'spent': 3, 'time_started': datetime.datetime(2015, 4, 21, 17, 8, 5, 415000)}
{'spent': 3, 'time_started': datetime.datetime(2015, 4, 21, 15, 52, 45, 917000)}
{'spent': 1, 'time_started': datetime.datetime(2015, 4, 21, 16, 42, 32, 313000)}
{'spent': 8, 'time_started': datetime.datetime(2015, 4, 21, 16, 35, 46, 863000)}
{'spent': 5, 'time_started': datetime.datetime(2015, 4, 21, 15, 55, 1, 217000)}
{'spent': 10, 'time_started': datetime.datetime(2015, 4, 20, 17, 41, 50, 5000)}
这是我目前得出的结论:
pipeline =[
'match': {
"time_started": {
"$gte": datetime.datetime(2015, 4, 21, 0, 0, 0),
}
},
'project': {
"spent": "$spent",
"time_started": {"$dateToString": {
"format": "%Y-%m-%dT%H:00:00",
"date": "$time_started"
}}
},
'group': {
"_id": {
"time_started": "$time_started",
},
"spent_total": {"$sum": "$spent"}
}
]
效果很好,但是“time_started”是结果中的一个字符串,而我需要日期时间,像这样:
{'spent_total': 16, 'time_started': datetime.datetime(2015, 4, 21, 16, 0, 0)}
{'spent_total': 3, 'time_started': datetime.datetime(2015, 4, 21, 17, 0, 0)}
{'spent_total': 8, 'time_started': datetime.datetime(2015, 4, 21, 15, 0, 0)}
【问题讨论】:
标签: python mongodb mongodb-query aggregation-framework mongoengine