MongoDB 中的字符串聚合

问题描述 投票:0回答:1

我收集了以下文件:

{
    "id": ...,
    "key": 47
},
{
    "id": ...,
    "key": 12
}

我想通过连接键(由

|
分隔)将整个集合聚合为单个字符串。所以在这里,输出将是字符串
47|12
。我不介意在最后加上一个额外的
|
,如果这样会让事情变得更容易的话。

这是如何在 MongoDB 聚合管道中完成的?我来自 SQL,在 PostgreSQL 中,这看起来像

select string_agg(key, "|" order by id) from my_table

我认为我可以通过首先将集合聚合到一个数组,然后在单个数组上应用

$reduce
$concat
函数来完成这项工作,但我不确定这是否是最好的解决方案,因为首先聚合到数组感觉不对。有没有办法立即减少集合?

mongodb aggregation-framework aggregation
1个回答
0
投票

可以通过使用

$group
阶段和
$push
创建所有键的数组来实现所需的结果。之后,使用
$reduce
将键与所需的分隔符连接起来。

带有分隔符的示例

"|"

[
  {
    "$group": {
      "_id": null,
      "keys": { "$push": "$key" }
    }
  },
  {
    "$project": {
      "_id": 0,
      "concatenatedKeys": {
        "$reduce": {
          "input": "$keys",
          "initialValue": "",
          "in": { "$concat": ["$$value", "|", { "$toString": "$$this" }] }
        }
      }
    }
  }
]

最后

$toString
在连接之前将每个键转换为字符串。如果所有键都是字符串类型,则可以省略。

© www.soinside.com 2019 - 2024. All rights reserved.