将对象转换为 key/value 数组 mongodb

Transform objects into key/value array mongodb

我有这个数据:

[
  {
    "_id": "0001",
    "n1": "0001",
    "n2": 1234
  },
  {
    "_id": "0002",
    "n1": "0002",
    "n2": 9876
  }
]

使用聚合框架将它转换成这个的最佳方法是什么?:

[
  {
    "_id": "0001",
    "lookupFields": [
      {
        "n": "n1",
        "v": "0001"
      },
      {
        "n": "n2",
        "v": 1234
      }
    ]
  },
  {
    "_id": "0002",
    "lookupFields": [
      {
        "n": "n1",
        "v": "0002"
      },
      {
        "n": "n2",
        "v": 9876
      }
    ]
  }
]

感谢您宝贵的帮助

db.collection.aggregate([
{
  $project: {
    n: {
      n1: "$n1",
      n2: "$n2"
    }
  }
},
{
  $project: {
    lookupFields: {
      $objectToArray: "$n"
    }
  }
},
{
  $addFields: {
    lookupFields: {
      $map: {
        input: "$lookupFields",
        as: "lf",
        in: {
          n: "$$lf.k",
          v: "$$lf.v"
        }
      }
    }
  }
 }
])

解释:

  1. 投影对象 n 内的 n1&n2 字段
  2. 将对象 n 投影为新字段 lookupFileds 作为数组。
  3. 映射以根据要求将数组对象键 k,v 重命名为 n,v

playground