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

如何用PyMongo将MongoDB中对象数组转换为数组数组?

使用PyMongo实现查询结果的格式转换

当然可以做到!你完全不需要在查询结果返回后手动遍历转换——MongoDB的聚合框架就能帮你在数据库层面完成这个格式转换,同时完全保留原始数据的结构,完美契合你的需求。

实现方案

核心是通过聚合管道的$project阶段,结合$map操作符来处理items数组:

  • 用$map遍历items数组中的每一个元素
  • 对每个元素,按你需要的顺序提取a、b、c字段的值,组装成新的数组

完整代码示例

from pymongo import MongoClient

# 连接MongoDB实例(根据你的实际连接信息调整)
client = MongoClient('mongodb://localhost:27017/')
db = client['your_db_name']
coll = db['records']

# 定义聚合管道
aggregation_pipeline = [
    {
        '$project': {
            'name': 1,  # 保留原始的name字段
            'items': {
                '$map': {
                    'input': '$items',  # 要遍历的原始items数组
                    'as': 'item',       # 遍历过程中每个元素的别名
                    'in': ['$$item.a', '$$item.b', '$$item.c']  # 按顺序转为数组
                }
            }
        }
    }
]

# 执行聚合查询并获取结果
formatted_results = list(coll.aggregate(aggregation_pipeline))
print(formatted_results)

代码说明

  • $project:用于定义输出文档的结构,这里我们指定保留name字段,并对items字段进行转换
  • $map:相当于一个“数组遍历转换器”,遍历输入的$items数组,对每个元素(用$$item引用)执行指定的转换逻辑
  • ['$$item.a', '$$item.b', '$$item.c']:明确指定字段顺序,确保输出的数组和你期望的格式完全匹配

执行这段代码后,你会得到如下格式的结果:

[{"name": "a", "items": [["5", "1", "2"], ["6", "3", "7"]]}]

补充说明

如果你的items子文档字段不固定,想要动态提取所有字段的值(不依赖固定的a/b/c字段名),可以结合$objectToArray和$map来实现,但考虑到你这里的字段是固定的,直接指定顺序的方式更高效、更可控。

内容的提问来源于stack exchange,提问作者duhaime

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:22:40