首页 > 解决方案 > 值如何成为 MonogoDB 数组中的键值?

问题描述

说明:我想将值转换为键的一部分,在文档 1 中 "xyz"替换为 v,在文档 2 中,"abc"替换为v注意:有多个文档,我不知道文档 3“sig_nam”的值是什么。

1号文件


  "sig_nam": "xyz",
  "cont_name": "1",
  "t_v": [
   {
      "t": "2020-11-20T03:00",
      "v": 0
    },
    {
      "t": "2020-10-25T03:00",
      "v": 0
    }
]
}

2号文件

{
  "sig_nam": "abc",
  "cont_name": "1",
  "t_v": [
   {
      "t": "2020-11-20T03:00",
      "v": 0
    },
    {
      "t": "2020-10-25T03:00",
      "v": 0
    }
]
}


预期输出文件 1


  "sig_nam": "xyz",
  "cont_name": "1",
  "t_v": [
   {
      "t": "2020-11-20T03:00",
      "xyz": 0
    },
    {
      "t": "2020-10-25T03:00",
      "xyz": 0
    }
]
}

预期产出 2 号文件

{
  "sig_nam": "abc",
  "cont_name": "1",
  "t_v": [
   {
      "t": "2020-11-20T03:00",
      "abc": 0
    },
    {
      "t": "2020-10-25T03:00",
      "abc": 0
    }
]
}

标签: arraysmongodbmongoosemongodb-queryaggregation-framework

解决方案


  • $mapt_v迭代数组的循环
  • $arrayToObject, 设置ksig_namand vas count and same for t, 包裹到数组括号中,它将转换为对象
db.collection.aggregate([
  {
    $addFields: {
      t_v: {
        $map: {
          input: "$t_v",
          in: {
            $arrayToObject: [[
              { k: "t", v: "$$this.t" },
              { k: "$sig_nam", v: "$$this.v" }
            ]]
          }
        }
      }
    }
  }
])

操场


推荐阅读