MongoDB两组汇总

时间:2019-12-23 12:52:27

标签: mongodb mongodb-query nosql

聚合操作处理数据记录并返回计算结果。聚合操作将来自多个文档的值分组在一起,并且可以对分组的数据执行各种操作以返回单个结果。 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" } } }
])

但我无法获得所需的东西。

有人可以帮我知道我在做什么不好吗?

1 个答案:

答案 0 :(得分:0)

以下聚合获取您要查找的输出。

$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 
        } 
  } 
] )