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

在C#中通过MongoDB聚合管道提取嵌套JSON字符串字段

MongoDB聚合管道提取JSON字符串嵌套字段解决方案

假设你的MongoDB文档中,存储上述JSON结构的字段名为json_field(请替换为实际字段名),以下是直接在聚合管道中提取property_3下指定字段的方法:

方法一:使用$parseJSON(MongoDB 4.4+推荐)

$parseJSON是MongoDB 4.4及以上版本提供的原生操作符,可直接将JSON字符串转换为BSON对象,方便后续字段访问:

db.collection.aggregate([
  // 第一步:将JSON字符串解析为BSON对象
  {
    $addFields: {
      parsed_json: { $parseJSON: "$json_field" }
    }
  },
  // 第二步:提取property_3下的目标字段
  {
    $project: {
      _id: 1, // 按需保留原文档ID
      target_fields: {
        _some_property_2: "$parsed_json.property_3._some_property_2",
        some_property_3: "$parsed_json.property_3.some_property_3"
        // 可继续添加需要提取的其他字段
      }
    }
  }
])

阶段说明:

  • $addFields:新增parsed_json字段,将原JSON字符串解析为可操作的BSON文档,此时就能像访问普通嵌套字段一样访问property_3。
  • 也可以直接在$project阶段合并解析逻辑,简化管道:
db.collection.aggregate([
  {
    $project: {
      _id: 1,
      target_fields: {
        _some_property_2: { $getField: { field: "_some_property_2", input: { $getField: { field: "property_3", input: { $parseJSON: "$json_field" } } } } },
        some_property_3: { $getField: { field: "some_property_3", input: { $getField: { field: "property_3", input: { $parseJSON: "$json_field" } } } } }
      }
    }
  }
])

方法二:兼容低版本MongoDB(4.0+)

如果你的MongoDB版本低于4.4,无法使用$parseJSON,可以通过$function调用JavaScript解析JSON(注意:大量数据处理时会有性能损耗):

db.collection.aggregate([
  {
    $addFields: {
      parsed_json: {
        $function: {
          body: function(jsonStr) { return JSON.parse(jsonStr); },
          args: ["$json_field"],
          lang: "js"
        }
      }
    }
  },
  {
    $project: {
      _id: 1,
      target_fields: {
        _some_property_2: "$parsed_json.property_3._some_property_2",
        some_property_3: "$parsed_json.property_3.some_property_3"
      }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:10:07