【问题标题】:MongoDB two groups AggregateMongoDB 两组聚合
【发布时间】:2019-12-23 12:52:27
【问题描述】:

聚合操作处理数据记录并返回计算结果。聚合操作将来自多个文档的值分组在一起,并且可以对分组数据执行各种操作以返回单个结果。 MongoDB 提供了三种执行聚合的方式:聚合管道、map-reduce 函数和单一用途聚合方法。

我想改变它:

{
    "_id" : ObjectId("5836b919885383034437d4a7"),
    "Identificador" : "G-3474",
    "Miembros" : [
        {
            "_id" : ObjectId("5836b916885383034437d238"),
            "Nombre" : "Pilar",
            "Email" : "pcarrillocasa@gmail.es",
            "Edad" : 24,
            "País" : "España",
            "Tipo" : "Usuario individual",
            "Apellidos" : "Carrillo Casa",
            "Teléfono" : 637567234,
            "Ciudad" : "Santander",
            "Identificador" : "U-3486",
            "Información_creación" : {
                "Fecha_creación" : {
                    "Mes" : 4,
                    "Día" : 22,
                    "Año" : 2016
                },
                "Hora_creación" : {
                    "Hora" : 15,
                    "Minutos" : 34,
                    "Segundos" : 20
                }
            }
        }
}

进入那个

{
  "Nombre_Grupo" : "Amigo invisible"
  "Ciudades" : [
        {
          "Ciudad" : "Madrid",
          "Miembros": 30
        },
        {
          "Ciudad" : "Almería",
          "Miembros": 10
        }
        {
          "Ciudad" : "Badajoz",
          "Miembros": 20
        }
  ]

}

使用 MongoDB。

我试过了:

db.Grupos_usuarios.aggregate([
   { $group: { _id: "$Nombre_Grupo",total: { $sum: "$amount" } },
 $group: { _id: "$Ciudad",total: { $sum: "$amount" } } }
])

但我无法得到我需要的东西。

有人可以帮我知道我做错了什么吗?

【问题讨论】:

  • 请在jsoneditor在线分享输入集合和输出集合
  • @MaheshBhatnagar 该系列是 Grupos_usuarios。它包含所有这些信息。谢谢!!
  • 请在jspn编辑器在线分享表格数据和你想要的数据
  • 请提供详细的文档示例。在给定的输入和结果中,值和字段似乎不匹配并且没有意义。与在 $group 中一样,您使用了输入文档中不存在的“Nombre_Grupo”字段。如果您可以提供更详细的输入和相应的输出。那会很有帮助。
  • 我发布了一个答案。请告诉它是否有用。

标签: mongodb mongodb-query nosql


【解决方案1】:

以下聚合获取您正在寻找的输出。

$unwind 阶段从输入文档中解构一个数组字段,为每个元素输出一个文档。这些文档用于按Miembros.Ciudad 分组,并获得每个 Ciudad 的总 Miembros。在第二个小组赛阶段,我们Pivot data 将之前分组的所有 Ciudades 放入一个数组中。最后一个$project 用于格式化输出。

db.test.aggregate( [
  { 
      $unwind: "$Miembros" 
  },
  { 
      $group: { 
          _id: "$Miembros.Ciudad", 
          total: { $sum: 1 } 
      } 
  },
  { 
      $group: { 
          _id: "Amigo invisible",
          Ciudades: { $push: { Ciudad: "$_id", Miembros: "$total"} }
      } 
  },
  { 
       $project: { 
           Nombre_Grupo: "$_id", 
           Ciudades: 1, 
           _id: 0 
        } 
  } 
] )

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 2020-06-13
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2016-05-03
    • 1970-01-01
    • 2017-07-13
    相关资源
    最近更新 更多