Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


terça-feira, 19 de abril de 2022

MongoDB - GROUP BY usando o $group (aggregation)

Por Eduardo Legatti

Olá,

Sabemos que em uma instrução SQL podemos utilizar o operador de agregação GROUP BY que é utilizado em conjunto com a cláusula SELECT para agrupar registros semelhantes em uma tabela. A seleção é feita de acordo os critérios definidos na cláusula WHERE, caso ela seja utilizada, e conforme o campo indicado para o agrupamento no comando GROUP BY. Sobre o resultado obtido, podemos aplicar diversas funções como:

  • Somatória dos valores de uma coluna: SUM()
  • Quantidade de registros que atenda a um critério: COUNT()
  • Cálculo da média ponderada: AVG()
  • Identificar os menores valores: MIN()
  • Identificar os maiores valores: MAX()

No MongoDB também podemos utilizar tais funções de agregação e o objetivo deste artigo será o de demonstrar a sintaxe do comando. Para exemplificar, usando um banco de dados relacional, teremos o seguinte cenário.

SQL> create table t1 (uf varchar2(2));

Tabela criada.

SQL> insert into t1 values ('MG');

1 linha criada.

SQL> insert into t1 values ('MG');

1 linha criada.

SQL> insert into t1 values ('MG');

1 linha criada.

SQL> insert into t1 values ('MG');

1 linha criada.

SQL> insert into t1 values ('MG');

1 linha criada.

SQL> insert into t1 values ('SP');

1 linha criada.

SQL> insert into t1 values ('SP');

1 linha criada.

SQL> insert into t1 values ('SP');

1 linha criada.

SQL> insert into t1 values ('RJ');

1 linha criada.

SQL> insert into t1 values ('RJ');

1 linha criada.

SQL> commit;

Commit concluído.
 
Após inserir os registros como mostrado acima, para agrupar todas as unidades federativas de forma a mostrar a quantidade total de cada uma na tabela T1, executaremos a seguinte instrução SQL. 
 
SQL> select uf,count(*) qtd from t1 group by uf;

UF        QTD
-- ----------
RJ          2
SP          3
MG          5
Agora irei criar o mesmo cenário no MongoDB.
> use db01
switched to db db01
> db.t1.insertMany([
...    { uf: "MG" },
...    { uf: "MG" },
...    { uf: "MG" },
...    { uf: "MG" },
...    { uf: "MG" },
...    { uf: "SP" },
...    { uf: "SP" },
...    { uf: "SP" },
...    { uf: "RJ" },
...    { uf: "RJ" }
... ]);
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("624f3981426338c36f74d687"),
                ObjectId("624f3981426338c36f74d688"),
                ObjectId("624f3981426338c36f74d689"),
                ObjectId("624f3981426338c36f74d68a"),
                ObjectId("624f3981426338c36f74d68b"),
                ObjectId("624f3981426338c36f74d68c"),
                ObjectId("624f3981426338c36f74d68d"),
                ObjectId("624f3981426338c36f74d68e"),
                ObjectId("624f3981426338c36f74d68f"),
                ObjectId("624f3981426338c36f74d690")
        ]
}
 
Após inserir os documentos como mostrado acima, para agrupar todas as unidades federativas de forma a mostrar a quantidade total de cada uma presente na collection T1, executaremos a seguinte instrução. 
 
> db.getCollection("t1").aggregate([{"$group" : {_id: "$uf" , count:{$sum:1}}}]);
{ "_id" : "RJ", "count" : 2 }
{ "_id" : "SP", "count" : 3 }
{ "_id" : "MG", "count" : 5 }



Nenhum comentário:

Postagens populares