使用Python+PyMongo操作MongoDB时如何调整聚合查询的输出格式
解决方案
你可以通过两种方式实现需求,不需要额外依赖:
方案1:直接在MongoDB聚合查询中实现(要求MongoDB 5.0及以上版本)
在原有$group阶段后替换你的$project阶段,新增$project和$replaceRoot两个阶段即可直接返回目标格式:
restos.aggregate([ {$unwind: "$categories"}, {$group: {_id: '$categories.title', count: {$sum: 1}}}, // 替换原有$project,新增以下两个阶段 {$project: {k: "$_id", v: "$count", _id: 0}}, {$replaceRoot: {newRoot: {$arrayToObject: [[{k: "$k", v: "$v"}]]}}} ])
执行后直接返回{ "Sandwiches" : 3 }格式的结果。
方案2:Python侧手动格式化(全版本兼容,实现成本更低)
不需要修改原有MongoDB查询语句,直接在PyMongo拿到返回结果后做一层转换即可:
from pymongo import MongoClient # 初始化数据库连接 client = MongoClient() db = client.你的数据库名称 # 执行你原来的聚合查询 cursor = db.restos.aggregate([ {"$unwind": "$categories"}, {"$group": {"_id": "$categories.title", "count": {"$sum": 1}}}, {"$project": {"type": "$_id", "count": 1, "_id": 0}} ]) # 格式化结果 format_result = {item["type"]: item["count"] for item in cursor} print(format_result) # 输出为 {'Sandwiches': 3}
两种方案都可以满足需求,小数据量场景下优先选择方案2,兼容性更强,调整成本更低。
内容的提问来源于stack exchange,提问作者codejourney
相关产品推荐
相关产品推荐

