Mongodb: como agrupar e somar


Você pode usar a seguinte sintaxe para agrupar e contar no MongoDB:

 db.collection.aggregate([
    { $group : { _id : " $field_name1 ", count :{ $sum : " $field_name2 "}}}
])

Observe que field_name1 é o campo pelo qual você deseja agrupar e field_name2 é o campo que você deseja somar.

Os exemplos a seguir mostram como usar essa sintaxe com uma equipe de cobrança com os seguintes documentos:

 db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 })
db.teams.insertOne({team: " Spurs ", position: " Forward ", points: 22 })
db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 })
db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 })
db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })

Exemplo 1: agrupar por e soma

Podemos usar o código a seguir para agrupar por campo “posição” e contar a soma dos pontos de cada posição.

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}}
])

Isso retorna os seguintes resultados:

 { _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }
{ _id: ' Center ', count: 19 }

Isso nos diz:

  • Os jogadores na posição “Atacante” somam 48 pontos no total.
  • Os jogadores com a posição “Guarda” somam 64 pontos no total.
  • Os jogadores na posição “Centro” têm um total de 19 pontos.

Exemplo 2: agrupar por e adicionar (depois classificar)

Podemos usar o código a seguir para encontrar a soma dos pontos de cada posição e classificar automaticamente os resultados em ordem crescente :

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count : 1}} 
])

Isso retorna os seguintes resultados:

 { _id: ' Center ', count: 19 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Guard ', count: 64 }

Os resultados são classificados por pontos em ordem crescente (do menor para o maior).

Podemos usar -1 no argumento count para classificar os resultados em ordem decrescente :

 db.teams.aggregate([
    { $group : { _id : " $position ", count :{ $sum : " $points "}}},
    { $sort : { count :-1}} 
])

Isso retorna os seguintes resultados:

 { _id: ' Guard ', count: 64 }
{ _id: ' Forward ', count: 48 }
{ _id: ' Center ', count: 19 }

Observe que os resultados são classificados por pontos em ordem decrescente (do maior para o menor).

Nota : Você pode encontrar a documentação completa do $group aqui .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns no MongoDB:

MongoDB: Como contar valores distintos em um campo
MongoDB: Como agrupar por vários campos
MongoDB: Como agrupar e contar

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *