Introdução

Neste artigo vou apresentar-lhe o grupo Mongodb por múltiplos campos. Para entender melhor primeiro vamos aprender sobre a função de agregação.

Função de Agregação MongoDB

Funções de agregação são usadas nas cláusulas GROUP BY para agregar dados agrupados. As funções de agregação funcionam melhor quando usadas com a cláusula GROUP BY. Entretanto, o uso de funções agregadas não se limita a consultas agrupadas.

Quando uma função agregada é usada em uma consulta sem a cláusula GROUP BY, a função agregada agrega todo o conjunto de resultados (todas as linhas que combinam com a cláusula WHERE). Se você não utilizar a cláusula GROUP BY, algumas funções agregadas na lista SELECT só podem ser utilizadas com outras funções agregadas. É por isso que a função agregar deve usar a cláusula GROUP BY para se conectar à lista na lista SELECT.

Por exemplo, em vez de usar a cláusula GROUP BY, o AVG em uma lista SELECT só pode corresponder à SUM, mas não pode corresponder a uma coluna específica.

A operação de agregação MongoDB é usada para operações em lote nos dados. Depois que a coleta é agrupada por condição, uma série de operações como soma, média e outras são executadas. As operações de agregação podem executar operações complexas de coleta, especialmente para estatísticas matemáticas e mineração de dados.

A entrada da operação de agregação no MongoDB é o documento de coleta. A saída pode ser um ou mais documentos. MongoDB oferece uma operação de agregação muito poderosa que pode ser dividida em três categorias:

  • Oleoduto de agregação
  • Operação de agregação para uso único
  • MapaReduzir modelo de programação

Grupo de Mongodb por Múltiplos Campos

O operador do grupo $ é um agregador que retorna um novo documento. Ele tem seu próprio operador, nós podemos obter o campo do documento atual pelo símbolo $ + nome do campo. Para entender o grupo MongoDB por campos múltiplos primeiro, vamos dar uma olhada numa lista de todos os operadores que podem ser usados em $ group:

  • $ sum – Retorna a soma de todos os campos numéricos.
  • $ avg – Calcula a média entre os campos numéricos.
  • $ min – Retorna o valor mínimo do campo numérico
  • $ max – Obtém o valor máximo do campo numérico.
  • $ push – Insere o valor do campo no campo de resultado
  • $ addToSet – Insere um valor em um array do documento resultante, mas não cria duplicatas.
  • $ first – Obtém apenas o primeiro documento dos agrupados, geralmente para ordenação.
  • $ last – Retorna o último documento.

O pipeline de agregação

No modo POSIX multithreaded, existe um método chamado pipeline, cujo fluxo de elementos de dados é executado sequencialmente por um conjunto de threads na ordem especificada. Após processar o documento em uma etapa, o pipeline de agregação transfere o resultado do processamento para a etapa seguinte.

Função tubo de polímero Filtrar o documento para descobrir quais documentos satisfazem os critérios. Converter o documento e modificar a forma de saída do documento.

Cada nível do pipeline de agregação é definido usando operadores de etapa, e cada operador de etapa pode usar operadores de expressão para calcular a soma, média, concatenação, ou quebras de linha antes de cada nível. O resultado é retornado no final e o resultado retornado pode ser diretamente produzido ou salvo para a coleta.

Fluxo de processamento

  • Db.coleta.agregado () pode usar vários canais ao mesmo tempo para processamento de dados.
  • Db.collection.aggregate () utiliza as operações nativas do MongoDB para agregar e suportar eficazmente operações tais como GroupBy em SQL sem ter de escrever rotinas JS personalizadas.
  • Cada fase do pipeline limita 100 MB de memória. Se um pipeline de nó único exceder o limite, o MongoDB gera um erro. Para processar grandes quantidades de dados, configure a propriedade allowDiskUse para true para gravar dados em um arquivo temporário para um nó de pipe agregado e permitir um limite de memória de 100 MB.
  • Db.collection.aggregate () pode ser aplicado a uma série de fatias, mas o resultado não pode ser perdido na série de fatias. MapReduce pode ser aplicado a uma série de fatias, e o resultado pode ser perdido em uma série de fatias.
  • Db.collection.aggregate () retorna um cursor, os dados são armazenados na memória e podem ser gerenciados diretamente como MongoShell.
  • A saída do db.collection.aggregate () só pode ser salva em um documento, e o tamanho do documento BSON é limitado a 16 MB.

Método de agrupamento

Usar o método de grupo é similar a usar a cláusula GROUP BY em SQL. O método de grupo tem três parâmetros:

  • Key: Exibe a chave do grupo
  • Initial: Inicializa o campo do documento que representa o grupo de documentos
  • Reduzir: Uma função que retorna o número de elementos. Esta função usa dois parâmetros como argumentos: o elemento atual e o documento de resultado agregado para o grupo atual.
  • Keyf: parâmetro opcional. Use uma função diferente do argumento chave para representar o objeto chave de retorno.
  • Cond: parâmetro opcional. Especifica que a condição deve retornar verdadeiro, caso contrário o documento não participará do agrupamento. Se este parâmetro não for especificado, todos os documentos participam do agrupamento.
  • Finalizar: parâmetro opcional. Isto representa uma função que é acionada antes de retornar um resultado agrupado.

Por exemplo:`js> db.users.group ({chave: {nome : true}, inicial: {total : 0},reduzir : função (curr, res){res.total += 1}})`

Vamos dar uma olhada na expressão. O parâmetro chave especifica que o grupo será agrupado por nome: key: {name: true}

O valor do parâmetro inicial inicializa os campos que representam o documento de resultado para o grupo. Neste caso, o valor inicial do campo total é definido. Este campo indica o número de elementos do grupo. Como não pode haver nenhum elemento, inicializamos a zero.

O parâmetro reduzir representa uma função onde o parâmetro corrente aponta para o objeto atual no grupo e res representa o grupo atual. Se você encontrar outro objeto com um valor específico para o campo nome, adicione esse documento ao grupo e aumente o valor total no documento res em 1.

O uso de $group

O $group usa _id para especificar o nome chave a ser agrupado, usando as estatísticas personalizadas do campo. Usando a operação agregada irá limpar o conceito de grupo Mongodb por múltiplos campos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
db.users.aggregate({
$match : { idade: { $gte : 18 } }
},{
$grupo : { _id:$nome do usuário, contagem:{$sum:1} }
});
// grupo Mongodb por múltiplos campos
db.users.aggregate({
$match: {age: {$gte:18} },
$grupo: {_id:{nome:$nome do usuário, idade:$ge}, ‘contar’:{$sum:1} }
})
// $sum:val Adicionar val a cada documento
// $avg:val Média do valor de cada documento
db.users.aggregate({
$group: { _id:$nome do usuário, contagem:{$avg:$age} }
})
db.users.aggregate({
$group: { _id:$nome do usuário, contagem:{$max:$age} }
})
db.users.aggregate({
$group: {_id:$nome do usuário, contagem:{$min:$age} }
})
/ $first:val Torne-se o primeiro no grupo
db.users.aggregate({
$group:{_id:$nome do usuário, contagem:{$first: $age}
})
db.users.aggregate({
$group:{_id:$username, contagem:{$last: $age} }
})
db.users.aggregate({
$group:{_id:$username, contagem:{$addToSet: $age}})
db.users.aggregate({
$group:{_id:$username, count:{$push: $age} }
})

>

Grupo Mongodb por múltiplos campos usando a operação Aggregate

Primeiro, a chave na qual o agrupamento é baseado é selecionada e então a coleção é dividida em grupos de acordo com o valor da chave selecionada. Pode-se então criar um documento final agregando os documentos em cada grupo.

O grupo não suporta clusters fragmentados e não pode realizar clustering de fragmentação. Se você precisar de suporte distribuído, você deve usar agregado ou mapReduce.

1
2
3
4
5
6
7
8
9
10
666>11
12
13
>
db.collection.group(document)
{
# Campo de agrupamento
key:{key1, key2:1},
# Condições de consulta
cond:{},
# Função agregada
reduce:function(current, result){},
# initialization
initial:{},
# Counting Return Function Set
finalize:function(){}
}

Calcular o número de itens em cada coluna

1
2
3
4
5
6>6
7
8
9
>

>

SELECT COUNT(*) DE GRUPO DE BENS POR CATEGORIA_ID;
db.goods.group({
key:{category_id:1},
cond:{},// todos juntos
reduce:function(current, result){// Correspondendo à corrente line,result Correspondendo a múltiplas linhas no grupo
result.total += 1;
},
inicial:{total:0}
})

Conclusão

Este artigo foi escrito para os desenvolvedores entenderem o grupo Mongodb por múltiplos campos usando a função agregada. Se você achar este artigo útil, continue visitando Object Rocket para mais artigos relacionados à base de dados.

Se você precisar de conselhos ou ajuda no gerenciamento da segurança, escalabilidade, ou backups da sua base de dados, por favor não hesite em contactar-nos em Object Rocket.

Deixe uma resposta

O seu endereço de email não será publicado.