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

MongoDB聚合结果转CSV:嵌套JSON对象字段访问语法问题

解决MongoDB嵌套特殊字段的访问与CSV转换问题

问题核心

你的问题出在嵌套数组中的特殊字段访问:ICECAT-interface包含连字符、@ID/@Name带@符号,这些字段名不符合JavaScript合法标识符规则,无法直接用.点语法访问;同时part_number_info是数组,必须先取数组元素再逐层访问。


方案1:优化聚合查询(推荐,减少后续遍历复杂度)

直接在聚合阶段把嵌套字段提取为顶层字段,后续生成CSV时更简单。修改你的$project阶段:

cursor = db.csv_import.aggregate([
  {
    $lookup: {
      from: 'EN',
      let: { pn: '$part_no', vendor: '$vendor_standard' },
      pipeline: [{
        $match: {
          $expr: {
            $and: [
              { $eq: ["$$pn", "$ICECAT-interface.Product.@Prod_id"] },
              { $eq: ["$$vendor", "$ICECAT-interface.Product.Supplier.@Name"] }
            ]
          }
        }
      }],
      as: 'part_number_info'
    }
  },
  { $match: { "part_number_info.0": { $exists: true } } },
  // 关键修改:提取数组第一个元素的嵌套字段,转为易访问的顶层字段
  {
    $project: {
      part_no: 1,
      product_id: { $arrayElemAt: ["$part_number_info.ICECAT-interface.Product.@ID", 0] },
      supplier_name: { $arrayElemAt: ["$part_number_info.ICECAT-interface.Product.Supplier.@Name", 0] },
      _id: 0
    }
  }
]);

此时查询结果会变成扁平化结构:

{ "part_no": "C28-00002", "product_id": "344038", "supplier_name": "Microsoft" }

遍历游标生成CSV的代码会非常简洁:

while (cursor.hasNext()) {
  const item = cursor.next();
  print(`${item.part_no},${item.product_id},${item.supplier_name}`);
}

方案2:直接在游标遍历中访问嵌套特殊字段

如果不想修改聚合查询,需要用方括号+字符串字段名的方式访问特殊字段,同时先取出数组元素:

while (cursor.hasNext()) {
  const jsonObject = cursor.next();
  // 取出part_number_info数组的第一个元素
  const partInfo = jsonObject.part_number_info[0];
  // 用[]访问带特殊字符的字段
  const productId = partInfo['ICECAT-interface'].Product['@ID'];
  const supplierName = partInfo['ICECAT-interface'].Product.Supplier['@Name'];
  // 输出CSV行
  print(`${jsonObject.part_no},${productId},${supplierName}`);
}

写法说明

  • JavaScript对象属性访问分两种:.标识符仅适用于合法标识符(无特殊字符、不以数字/特殊符号开头);当字段含连字符、@等特殊字符时,必须用['字符串']形式。
  • part_number_info是数组类型,必须通过索引(如[0])取出具体元素后,才能访问其内部属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:55:25