MongoDB 聚合 return 仅在日期键大于 PyMongo 中的特定日期时计算平均值
MongoDB aggregate return averages only where date key is greater than a specific date in PyMongo
我有一个 collection 看起来像这样;
{_id: 1204187,
'name' : 'name',
'date' : 2020-06-21T00:00:00.000+00:00,
'metric_a' : 88.14502,
'metric_b' : 31.26421,
'metric_c' : 1544.32414,
'info' : {'foreign_key' : 156789,
'country' : 'US',
'tags' : ['a', 'b', 'c']}}
我想return 聚合文档,但只聚合日期大于 7-1-2020 的文档。
这是我的第一次尝试;
date_obj = dt.datetime(today.year, today.month, 1)
docs = loads(dumps(collection.aggregate(
[{
'$match' : {
'_id' : '$name',
'metric_a' : {'$avg' : '$metric_a'},
'metric_b' : {'$avg' : '$metric_b'},
metric_c: {'$avg' : '$metric_c'},
},'$match' : {'date' : {'$gte' : date_obj}}
}])))
这最终会用不同的日期分别对每个文档进行分组。我错过了什么?
找到解决方案;
docs = loads(dumps(collection.aggregate(
[
{'$match' : {'date' : {'$gte' : date_obj}}},
{
'$group' : {
'_id' : '$name',
'metric_a' : {'$avg' : '$metric_a'},
'metric_b' : {'$avg' : '$metric_b'},
'metric_c' : {'$avg' : '$metric_c'},
'info' : {'$last' : '$info'}
}
}
])))
非常直观,先设置条件,然后设置返回方式和内容。
我有一个 collection 看起来像这样;
{_id: 1204187,
'name' : 'name',
'date' : 2020-06-21T00:00:00.000+00:00,
'metric_a' : 88.14502,
'metric_b' : 31.26421,
'metric_c' : 1544.32414,
'info' : {'foreign_key' : 156789,
'country' : 'US',
'tags' : ['a', 'b', 'c']}}
我想return 聚合文档,但只聚合日期大于 7-1-2020 的文档。 这是我的第一次尝试;
date_obj = dt.datetime(today.year, today.month, 1)
docs = loads(dumps(collection.aggregate(
[{
'$match' : {
'_id' : '$name',
'metric_a' : {'$avg' : '$metric_a'},
'metric_b' : {'$avg' : '$metric_b'},
metric_c: {'$avg' : '$metric_c'},
},'$match' : {'date' : {'$gte' : date_obj}}
}])))
这最终会用不同的日期分别对每个文档进行分组。我错过了什么?
找到解决方案;
docs = loads(dumps(collection.aggregate(
[
{'$match' : {'date' : {'$gte' : date_obj}}},
{
'$group' : {
'_id' : '$name',
'metric_a' : {'$avg' : '$metric_a'},
'metric_b' : {'$avg' : '$metric_b'},
'metric_c' : {'$avg' : '$metric_c'},
'info' : {'$last' : '$info'}
}
}
])))
非常直观,先设置条件,然后设置返回方式和内容。