You need to enable JavaScript to run this app. 如何通过MongoDB聚合将display嵌套结构转换为指定扁平键值对结构
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MongoDB聚合将display嵌套结构转换为指定扁平键值对结构

实现思路

你可以通过单阶段$set聚合操作完成转换,核心逻辑是拆分原display数组的三部分分别处理后再合并,其他原有字段会自动保留无需额外处理。


完整聚合管道代码

db.collection.aggregate([
  {
    $set: {
      display: {
        $concatArrays: [
          // 处理前两个固定元素,替换第一个元素的键名
          [
            {
              "SQL commands": {
                $getField: {
                  input: { $arrayElemAt: ["$display", 0] },
                  field: "SQL commands that triggered the attack:"
                }
              }
            },
            { $arrayElemAt: ["$display", 1] }
          ],
          // 处理第三部分的嵌套二维数组,转成日期为键的对象
          {
            $map: {
              input: { $arrayElemAt: ["$display", 2] },
              as: "item",
              in: {
                $arrayToObject: [
                  [
                    {
                      k: { $getField: { input: { $arrayElemAt: ["$$item", 0] }, field: "ISODate" } },
                      v: { $arrayElemAt: ["$$item", 1] }
                    }
                  ]
                ]
              }
            }
          }
        ]
      }
    }
  }
])

低版本兼容方案

如果你使用的MongoDB版本低于5.0(不支持$getField操作符),可以用$objectToArray + $first的组合替换取值逻辑:

  1. 第一个元素的取值替换为:{ $first: { $objectToArray: { $arrayElemAt: ["$display", 0] } }.v }
  2. 日期字段的取值替换为:{ $first: { $objectToArray: { $arrayElemAt: ["$$item", 0] } }.v }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:00:01