MongoDB Unwind报错无法编码set类型 按equity_id分组统计持股总和问题
报错原因
- 第一个问题:
$unwind语法错误。你写的{"$unwind": {'$portfolios.transactions'}}里,单个值放在大括号中在Python环境下会被识别为集合(set)类型,MongoDB无法解析该类型参数。同时你忽略了portfolios本身是数组结构,需要先展开portfolios数组,再展开其下的transactions数组。 - 第二个问题:
$group逻辑不符合需求。你当前的分组仅用了$equity_id,但该字段嵌套在transactions下,路径错误,同时缺少user分组维度和shares求和逻辑。
可直接运行的聚合语句
db.collection.aggregate([ # 第一层展开:展开portfolios数组 {"$unwind": "$portfolios"}, # 第二层展开:展开每个portfolio下的transactions数组 {"$unwind": "$portfolios.transactions"}, # 按user + equity_id分组,统计shares总和 {"$group": { "_id": { "user": "$user", "equity_id": "$portfolios.transactions.equity_id" }, "total_shares": {"$sum": "$portfolios.transactions.shares"} }} ])
输出说明
执行后返回的结果结构示例:
{ "_id": { "user": "blablabla", "equity_id": "abcd" }, "total_shares": 100 }, { "_id": { "user": "blablabla", "equity_id": "efgh" }, "total_shares": 1000 }
内容的提问来源于stack exchange,提问作者Luiz Felipe Freitas
相关产品推荐
相关产品推荐

