【发布时间】:2018-01-09 12:33:40
【问题描述】:
如果所有元素都在查询中硬编码,那么这是我基于时间戳执行聚合(按天计算)的尝试。
pipe = [
{
"$match": {
"cid": ObjectId("57fe39972b8dbc1387b20913")
}
},
{
"$project":
{
"animal_dog": "$animal.dog",
"animal_dog_tail": "$animal.dog.tail",
"animal_cat": "$animal.cat",
"tree": "$fruits",
"day": {"$substr": ["$timestamp", 0, 10]}
}},
{
"$group":
{
"_id" : "$day",
"animal_dog" : {"$sum": "$animal_dog"},
"animal_dog_tail": {"$sum": "$animal_dog_tail"},
"animal_cat": {"$sum": "$animal_cat"},
"tree": {"$sum": "$tree"},
"fruits": {"$sum": "$fruits"},
}} ]
output = dailycollection.aggregate(pipeline = pipe)
假设我有一个具有完全相同嵌套结构的 mongo-collection,我如何传递一个带有相应元素的 python_list 以根据时间戳进行聚合? 假设我的 Python 列表有这样的元素:
key_list = animal.dog, animal.dog.tail, animal.cat, tree, fruits, timestamp.
我想将此列表传递到我刚刚在上面编写的查询中,而不对每个元素进行硬编码。我想对元素执行projection、$sum、$group,而不像在上述查询中那样对它们进行硬编码。我想在$project 和$group 阶段简单地遍历python 列表。
这可能吗?
还有我如何确保输出查询也保留相同的嵌套格式而不会丢失深度?
【问题讨论】:
标签: python mongodb aggregation-framework pymongo