如何在MongoDB聚合框架中收集数组对象的值来分隔数组?

gjmwrych  于 2023-03-07  发布在  Go
关注(0)|答案(1)|浏览(103)

以下是收集内容的示例:

  • 博客作者 *
[
    {
        _id: ObjectId(...),
        posts: [
            {
                "platform": "instagram"
            },
            {
                "platform": "tiktok"
            },
        ],
        full_name: "John Doe",
    },
    {
        _id: ObjectId(...),
        posts: [
            {
                "platform": "youtube"
            },
            {
                "platform": "tiktok"
            },
        ],
        full_name: "Mamed Mamedov"
    }
]

作为聚合的结果,我想得到这样的结果:

[
    {
        _id: ObjectId(...),
        platforms: ["instagram", "tiktok"],
        full_name: "John Doe",
    },
    {
        _id: ObjectId(...),
        platforms: ["youtube", "tiktok],
        full_name: "Mamed Mamedov"
    }
]

(List posts字段中的平台数量)
到目前为止,我甚至不确定mongodb中是否有现成的方法。

myzjeezk

myzjeezk1#

您可以使用$reduce轻松完成此操作:

db.collection.aggregate([
{
"$project": {
  "full_name":1,
  "platforms": {
    "$reduce": {
      "input": "$posts",
      "initialValue": [],
      in: {
        $concatArrays: [
          "$$value",
          [
            "$$this.platform"
          ]
        ]
      }
    }
   }
  }
 }
])

example

相关问题