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

如何将MongoDB查询结果中的元素名称映射为表单字段标题?

解决方案

你可以通过MongoDB的聚合管道实现字段ID到标题的映射,具体聚合查询如下:

db.FormData.aggregate([
  // 关联Form集合,匹配相同_id的文档
  {
    $lookup: {
      from: "Form",
      localField: "_id",
      foreignField: "_id",
      as: "formInfo"
    }
  },
  // 展开关联得到的formInfo数组
  { $unwind: "$formInfo" },
  // 将FormData中除_id外的动态字段转为k-v数组
  {
    $project: {
      _id: 1,
      data: { $objectToArray: "$$ROOT" },
      fields: "$formInfo.Fields"
    }
  },
  // 过滤掉data数组中的_id元素
  {
    $project: {
      _id: 1,
      data: {
        $filter: {
          input: "$data",
          cond: { $ne: ["$$this.k", "_id"] }
        }
      },
      fields: 1
    }
  },
  // 展开data数组
  { $unwind: "$data" },
  // 展开fields数组
  { $unwind: "$fields" },
  // 匹配字段ID一致的条目
  {
    $match: {
      $expr: { $eq: ["$data.k", "$fields.FieldID"] }
    }
  },
  // 按_id分组,收集标题与对应值的映射
  {
    $group: {
      _id: "$_id",
      mappedFields: {
        $push: {
          k: "$fields.Title",
          v: "$data.v"
        }
      }
    }
  },
  // 将映射数组转为对象,并合并_id
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          { _id: "$_id" },
          { $arrayToObject: "$mappedFields" }
        ]
      }
    }
  }
])

步骤说明

  • $lookup:关联Form集合,获取当前文档对应的字段标题配置。
  • $objectToArray:把FormData中的动态字段(即那些UUID键)转换成键值对数组,方便后续匹配。
  • $filter:移除转换后数组中的_id元素,避免干扰后续匹配。
  • 两次$unwind:分别展开数据数组和字段配置数组,让每个字段ID和对应的标题能一一匹配。
  • $match:筛选出字段ID一致的条目,建立ID到标题的映射关系。
  • $group:按文档ID分组,把标题和对应值收集成新的键值对数组。
  • $arrayToObject + $replaceRoot:把收集的数组转换成对象,替换为根文档,得到最终的映射结果。

内容的提问来源于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:50:36