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

如何使用pyMongo聚合展开嵌套Stock数组生成指定结构的独立文档

解决方案

你只需要在现有聚合逻辑基础上补充$unwind拆分Stock数组,再做一次字段映射即可实现需求,完整聚合语句如下:

db.getCollection('File').aggregate([
  // 拆分Stock数组,每个数组元素对应生成一条独立文档
  {
    "$unwind": "$Stock"
  },
  // 按规则映射目标字段,同时做对应类型转换
  {
    "$project": {
      "_id": 0, // 不需要默认_id字段可保留该行,否则删除即可
      "item_id": "$Id",
      "store": "$Stock.Code",
      "price": { "$toDouble": "$Price.Base" },
      "quantity": { "$toInt": "$Stock.Qty" },
      "sale_price": { "$toDouble": "$Price.Promo" }
    }
  }
])

pyMongo 调用示例

直接将上述管道作为参数传入pyMongo的aggregate方法即可执行:

from pymongo import MongoClient

# 初始化连接
client = MongoClient('你的MongoDB连接串')
db = client['你的数据库名称']
collection = db['File']

# 定义聚合管道
pipeline = [
    {"$unwind": "$Stock"},
    {
        "$project": {
            "_id": 0,
            "item_id": "$Id",
            "store": "$Stock.Code",
            "price": {"$toDouble": "$Price.Base"},
            "quantity": {"$toInt": "$Stock.Qty"},
            "sale_price": {"$toDouble": "$Price.Promo"}
        }
    }
]

# 执行聚合
result = collection.aggregate(pipeline)
# 遍历获取结果
for item in result:
    print(item)

补充说明

  • 如果不需要强制转换字段类型,直接写字段路径即可,比如"price": "$Price.Base"
  • $unwind必须放在字段映射步骤之前,才能正确拆分数组后匹配每个Stock子字段
  • $project步骤已经指定了仅输出目标字段,原文档的Price、Stock等冗余字段会自动排除,不需要额外写$unset

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

相关产品推荐
方舟 Agent Plan

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

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