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

MongoDB中通过FieldID关联Form与FormData集合并转换数据结构

MongoDB关联Form与FormData集合并生成结构化数据

你可以通过MongoDB的聚合管道完成两个集合的关联与结构化转换,以下是实现代码:

db.Form.aggregate([
  // 关联FormData集合,匹配相同_id的文档
  {
    $lookup: {
      from: "FormData",
      localField: "_id",
      foreignField: "_id",
      as: "formData"
    }
  },
  // 展开FormData的结果数组(每个Form对应一个FormData,展开后为单个文档)
  { $unwind: "$formData" },
  // 展开Form中的Fields数组,逐个处理每个字段
  { $unwind: "$Fields" },
  // 展开FormData中的Data数组,逐个处理每个数据项
  { $unwind: "$formData.Data" },
  // 匹配FieldID相同的字段与数据项
  {
    $match: {
      $expr: { $eq: ["$Fields.FieldID", "$formData.Data.FieldID"] }
    }
  },
  // 按原文档_id分组,收集每个字段的标题与对应值
  {
    $group: {
      _id: "$_id",
      dataEntries: {
        $push: {
          k: "$Fields.Title",
          v: "$formData.Data.Value"
        }
      }
    }
  },
  // 将收集的键值对数组转换为结构化对象
  {
    $project: {
      Data: { $arrayToObject: "$dataEntries" }
    }
  }
])

步骤解析:

  1. $lookup:根据_id将FormData集合的关联数据查询出来,存入formData字段。
  2. $unwind:分别展开formData、Fields和formData.Data数组,让每个字段和对应数据项成为独立文档,方便后续匹配。
  3. $match:通过$expr比较字段的FieldID,确保只保留字段与数据项匹配的文档。
  4. $group:按原文档的_id分组,将每个匹配成功的字段标题(Title)和对应值(Value)以{k:..., v:...}的格式存入数组。
  5. $project:使用$arrayToObject将键值对数组转换为目标格式的结构化对象,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:20:22