MongoDb Aggregation - 将值设置为键,将相应的数组值设置为值

时间:2018-02-26 08:21:15

标签: mongodb aggregation-framework

在mongodb中,我在运行聚合后得到了一个低于形状的get对象。

 {
      "_id": 1,
      "specificationList": {
        "key": "Memory & Storage Features",
        "values": [
          {
            "key": "Internal Storage",
            "value": [
              "32 KB"
            ]
          },
          {
            "key": "RAM",
            "value": [
              "32 MB"
            ]
          },
          {
            "key": "Expandable Storage",
            "value": [
              "8 GB"
            ]
          },
          {
            "key": "Supported Memory Card Type",
            "value": [
              "MicroSD"
            ]
          }
        ]
      }
    }

从上面的文档中,我怎样才能在下一个聚合管道中获得下面形状的对象。我需要达到以下形状,以使代码更清洁。我正在使用聚合来达到上面的形状(所以想要附加另一个管道),知道在下面的形状得到什么聚合管道会很好

{
 "specList” : {
    “Internal Storage”: “32 KB”,
   “RAM”:”32 MB”,
   “Expandable Storage”:”8 GB”,
    “Supported Memory Card Type”:”MicroSD”
   }
}

1 个答案:

答案 0 :(得分:7)

在不知道完整管道的情况下,您可以使用 $arrayToObject 运算符将数组转换为单个文档,但该数组必须包含两个字段k和{{ 1}} v字段包含字段名称,k字段包含字段值。在上面的聚合文档中,您需要映射 将数组赋值为上述格式,然后 $arrayToObject 运算符可以愉快地转换。

考虑添加 $project 管道步骤,该步骤使用 $map 运算符更改数组结构,然后将转换结果应用于期望的对象。

以下说明了这一点:

v