我有一组文件看起来像:
{
"id": 45,
"some_list": [{"x": 1, "y": {"a": 10, "b": 32, "c": 91}},
{"x": 2, "y": {"a": 12, "b": 26, "d": 75, "p": 1}}]
}
要么
{
"id": 119,
"some_list": [{"x": 1, "y": {"a": 5}},
{"x": 2, "y": {"b": 60, "p": 8}}]
}
我想检索一个汇总所有 y
词典的聚合结果 . 得到:
{"a": 27, "b": 118, "c": 91, "d": 75, "p": 9}
# a = 10 + 12 + 5
# b = 32 + 26 + 60
# c = 91
# d = 75
# p = 1 + 8
这是我尝试过的:
pipeline = [
{"$unwind": "$some_list"},
{"$group": {"_id": "$some_list.y.key", "count": {"$sum": "$some_list.y.value"}}},
]
list(client.db.collection.aggregate(pipeline))
1 回答
您可以使用以下聚合
由于你有未知的密钥,你必须使用$objectToArray将动态密钥转换为
k
和v
格式,然后你可以很容易地$group .产量
即使你想要键值对中的数据,你也可以使用它
产量