【问题标题】:MongoDB Query: How can I aggregate an array of objects as a stringMongoDB 查询:如何将对象数组聚合为字符串
【发布时间】:2022-01-06 14:19:43
【问题描述】:

我有一个对象数组,我想在其中创建一个字符串,将数组中的所有相同属性连接起来。示例:

{
    _id: 123,
    example_document: true,
    people: [
        {
            name: "John",
            age: 18
        }, {
            name: "Clint",
            age: 20
        }
    ]
}

我想对我的结果进行 查询

{
    _id: 123,
    example_document: true,
    people: [
        {
            name: "John",
            age: 18
        }, {
            name: "Clint",
            age: 20
        }
    ],
    concat_names: "John, Clint"
}

我认为聚合是我应该采取的路径,但我无法找到从中获取字符串的方法,只能将数组元素连接到另一个数组中。有人可以帮忙吗?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用$concat 结合$reduce 来实现此目的,如下所示:

    db.collection.aggregate([
      {
        $addFields: {
          concat_names: {
            $reduce: {
              input: "$people",
              initialValue: "",
              in: {
                $concat: [
                  "$$value",
                  {
                    $cond: [
                      {
                        $eq: [
                          {
                            "$strLenCP": "$$value"
                          },
                          0
                        ]
                      },
                      "",
                      ", "
                    ]
                  },
                  "$$this.name"
                ]
              }
            }
          }
        }
      }
    ])
    

    Mongo Playground

    【讨论】:

    • 谢谢,解决了
    【解决方案2】:

    您可以使用聚合运算符$project$map

    db.collection.aggregate([
    {
        $project:
        {
            concat_names:
            {
                $map:
                {
                    input: "$people",
                    as: "i",
                    in: "$$i.name"
                }
            }
        }
    }])
    

    【讨论】:

    • 你真的可以在地图上使用 $concat 吗?我收到一条错误消息,告诉我 concat 只能与字符串一起使用,并且 map 返回一个数组
    • 哦,concat 或者 concatArrays
    猜你喜欢
    • 2020-07-27
    • 2020-11-27
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多