当前位置: 首页 > 知识库问答 >
问题:

MongoDB聚合中的多重嵌套分组

关学
2023-03-14

我的mongoDB集合中有一千多个文档,其中每个文档都表示这样一首歌的数据:

{
  "_id": ObjectID("612e03a790c3d3189845589b"),
  "artist": "3 Doors Down",
  "title": "Landning in London",
  "album": "Another 700 Miles",
  "genre": "Seventeen Days",
  "trackNumber": 5,
  "year": 2005,
  "rating": 3,
  "duration": "4:32",
  "country": "United States",
}

现在,在聚合管道的帮助下,我想按以下方式对我的集合进行分组。到目前为止,我可以对1个阶段进行分组,但我很难将整个根文档进行到底,并进行嵌套分组。

列出所有流派-

{
  [
    {
      "genreName": "Alternative Rock",
      "artists": [
        {
          "artistName": "3 Doors Down",
          "albums": [
            {
              "albumName": "Seventeen Days",
              "songs": [
                {
                  "_id": ObjectID(612e03a790c3d3189845589b),
                  "artist": "3 Doors Down",
                  "title": "Landning in London",
                  "album": "Another 700 Miles",
                  "genre": "Seventeen Days",
                  "trackNumber": 5,
                  "year": 2005,
                  "rating": 3,
                  "duration": "4:32",
                  "country": "United States",
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

共有1个答案

罗星洲
2023-03-14

这一条应该有效:

db.collection.aggregate([
   {
      $group: {
         _id: { genreName: "$genre", artistName: "$artist", albumName: "$album" },
         songs: { $push: "$$ROOT" }
      }
   },
   {
      $group: {
         _id: { genreName: "$_id.genreName", artistName: "$_id.artistName" },
         albums: { $push: { albumName: "$_id.albumName", songs: "$songs" } }
      }
   },
   {
      $group: {
         _id: "$_id.genreName",
         artists: { $push: { artistsName: "$_id.artistsName", albums: "$albums" } }
      }
   },
   { $project: { _id: 0, genreName: "$_id", artists: 1 } }
])
 类似资料:
  • 我正在尝试设置一个搜索查询,该查询应通过多级嵌套字段复合聚合集合,并从该集合中提供一些子聚合指标。我能够按预期使用其存储桶获取复合聚合,但所有存储桶的子聚合指标都带有。我不确定我是否未能正确指出子聚合应考虑哪些字段,或者它是否应放置在查询的不同部分中。 我的收藏看起来类似于以下内容: 贝娄,你可以找到我已经尝试了。尽管所有文档都有一个设置的点击值,但所有存储桶都带有点击总数。 到目前为止,我的回应

  • 如何聚合一个值在嵌套在Elasticsearch嵌套位置?我对一个嵌套对象没有问题,但在嵌套对象内的嵌套我感到困惑... 样本数据: 欲望结果: 在索引映射中,我将cat_a和条目字段的类型设置为嵌套,当我从工具字段查询聚合时,在cat_a的根(级别1)中没有问题,并且可以工作,但是在聚合中在rx_a(这是在第2级)我不能检索结果,它或空或显示错误,因为我的错误查询。 查询级别1 agg: 如何处

  • 多亏了这里的人的帮助,我成功地在我的文档中找到了两个ID,并在另一个集合中找到了他们的代表文档。我需要采取的下一步是进一步查找一个“嵌套”ID(引用另一个集合中的文档)。 其结果如下: 我希望chieftain部分是这样的(这就是没有添加'last'$lookup'的chieftain文档的样子):

  • 在这里,我得到了错误: “无效的术语聚合顺序路径[price>price>price.max]。术语桶只能在子聚合器路径上排序,该路径由路径中的零个或多个单桶聚合和路径末尾的最终单桶或度量聚合组成。子路径[price]指向非单桶聚合” 如果我按持续时间聚合排序,查询可以正常工作,如 那么,有什么方法可以通过嵌套字段上的嵌套聚合来排序聚合吗?

  • 本文向大家介绍MongoDB聚合分组多个结果,包括了MongoDB聚合分组多个结果的使用技巧和注意事项,需要的朋友参考一下 要聚合多个结果,请在MongoDB中使用$group。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是汇总组多个结果的查询- 这将产生以下输出-

  • 我试图查询与特定用户至少有一种共同颜色的所有用户,我已经能够做到这一点,但是我无法弄清楚如何我的结果,以便我可以得到一个用户以及他们共有的颜色。 我的示例用户文档的一部分如下: 这是我的查询,用于获取与另一个具有红色、橙色和绿色的用户相同的颜色: 如何使用共同的颜色聚合用户?