You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:15:01