MongoDB切换键值对

时间:2017-07-18 20:15:32

标签: mongodb aggregation-framework nosql

是否有汇总查询来转换以下内容:

{
  "data": [
    {
      "key": "aaa",
      "values": [1,2,3]
    },
    {
      "key": "bbb",
      "values": [4,5,6]
    }
  ]
}

到这个结构?

{
  "data": [
    {
      "aaa": "1,2,3"
    },
    {
      "bb": "4,5,6"
    }
  ]
}

我可以在其下搜索聚合命令的一些提示或关键字也很有用......

更新 我使用的是MongoDB 3.4.3,遗憾的是$arrayToObject无效。所以我猜,问题更为根本:

有没有办法为MongoDB 3.4.3或更低版本设置字段名称通用(根据其他一些值)?

提前多多感谢:)

1 个答案:

答案 0 :(得分:2)

要将键和值切换为实际的JSON键/值对,您可以使用MongoDB Aggregation运算符$arrayToObject。 首先,您必须将字段名称keyvalue更改为kv,如下所示:

{
  "data": [
    {
      "k": "aaa",
      "v": [1,2,3]
    },
    {
      "k": "bbb",
      "v": [4,5,6]
    }
  ]
}

修改文档字段后,您可以使用运算符$arrayToObject

db.collection.aggregate([
              { $project : { data : { $arrayToObject : "$data" }}}
]);

将输出如下:

{
  "data": {
    "aaa": [1, 2, 3],
    "bbb": [4, 5, 6]
  }
}

请注意,$arrayToObject数组聚合运算符在MongoDB v3.4.4 +

中可用

有关反向聚合运算符,另请参阅$objectToArray

如果您还希望将数组[1, 2, 3]的值转换为"1,2,3"的单个字符串,则可以使用$concat字符串运算符。

另请参阅手册中的更多聚合Array OperatorsString Operators