Agregação de grupos do MongoDB

Agregacao De Grupos Do Mongodb



A agregação é o procedimento de extração de dados de uma coleção do MongoDB. Ele processa vários documentos e fornece resultados estimados. A agregação no MongoDB possui diversos operadores e métodos que realizam diversas tarefas. Entre esses operadores, o operador $group agrupa os documentos para cada agrupamento exclusivo e os organiza de acordo com uma expressão definida. O operador de grupo é significativo no MongoDB, pois facilita uma ampla gama de manipulações de dados. A agregação $group no exemplo do MongoDB junto com diferentes acumuladores é fornecida abaixo.

Como funciona a agregação de grupos no MongoDB?

O operador $group deve ser usado para agrupar os documentos de entrada de acordo com a expressão _id especificada. Em seguida, ele deve retornar um único documento com os valores totais para cada grupo separado. Para começar a implementação, criamos a coleção “Livros” no MongoDB. Após a criação da coleção “Livros”, inserimos os documentos que estão associados aos diferentes campos. Os documentos são inseridos na coleção através do método insertMany() conforme a query a ser executada é mostrada abaixo.

>db.Books.insertMany([

{
_id:1,
título: 'Anna Karenina',
preço: 290,
ano: 1879,
order_status: 'Em estoque',
autor: {
'name':'Leo Tolstoi'
}
},
{
_id:2,
título: 'To Kill a Mockingbird',
preço: 500,
ano: 1960,
order_status: 'fora de estoque',
autor: {
'nome':'Harper Lee'
}
},
{
_id:3,
título: 'Homem Invisível',
preço: 312,
ano: 1953,
order_status: 'Em estoque',
autor: {
'nome':'Ralph Ellison'
}
},
{
_id:4,
título: 'Amado',
preço: 370,
ano: 1873,
order_status: 'out_of_stock',
autor: {
'nome':'Toni Morrison'
}
},
{
_id:5,
título: 'As coisas desmoronam',
preço: 200,
ano: 1958,
order_status: 'Em estoque',
autor: {
'name':'Chinua Achebe'
}
},
{
_id:6,
título: 'A Cor Púrpura',
preço: 510,
ano: 1982,
order_status: 'fora de estoque',
autor: {
'nome':'Alice Walker'
}
}
])

Os documentos são armazenados com sucesso na coleção “Books” sem encontrar nenhum erro porque a saída é reconhecida como “true”. Agora, vamos utilizar esses documentos da coleção “Books” para realizar a agregação “$group”.









Exemplo # 1: Uso de $group Aggregation



O uso simples da agregação $group é demonstrado aqui. A consulta agregada insere primeiro o operador “$group” e depois o operador “$group” usa as expressões para gerar os documentos agrupados.





>db.Books.aggregate([

{ $grupo:{ _id:'$autor.nome'} }

])

A consulta acima do operador $group é especificada com o campo “_id” para calcular os valores totais para todos os documentos de entrada. Em seguida, o campo “_id” é alocado com o “$author.name” que forma um grupo diferente no campo “_id”. Os valores separados de $autor.name serão retornados porque não computamos nenhum valor acumulado. A execução da consulta agregada $group tem a seguinte saída. O campo _id tem valores de author.names.



Exemplo # 2: Uso de $group Aggregation com o $push Accumulator

O exemplo de agregação $group usa qualquer acumulador que já foi mencionado acima. Mas podemos usar os acumuladores na agregação $group. Os operadores acumuladores são aqueles que são usados ​​nos campos de entrada do documento, exceto aqueles que são “agrupados” em “_id”. Vamos supor que queremos colocar os campos da expressão em uma matriz, então o acumulador “$push” é chamado no operador “$group”. O exemplo ajudará você a entender o acumulador “$push” do “$group” com mais clareza.

>db.Books.aggregate(

[

{ $grupo: { _id: '$_id', ano: { $push: '$ano' } } }

]

).bonito();

Aqui, queremos agrupar a data do ano de publicação dos livros fornecidos na matriz. A consulta acima deve ser aplicada para fazer isso. A consulta de agregação é fornecida com a expressão onde o operador “$group” pega a expressão de campo “_id” e a expressão de campo “year” para obter o ano do grupo usando o acumulador $push. A saída recuperada dessa consulta específica cria a matriz de campos de ano e armazena o documento agrupado retornado dentro dela.

Exemplo # 3: Uso da Agregação $group com o Acumulador “$min”

Em seguida, temos o acumulador “$min” que é usado na agregação $group para obter o valor mínimo correspondente de cada documento na coleção. A expressão de consulta para o acumulador $min é fornecida abaixo.

>db.Books.aggregate([

{
$grupo:{
_Eu iria:{
título: '$título',
status_pedido: '$status_pedido'
},
minPreço:{$min: '$preço'}
}
}
])

A consulta possui a expressão de agregação “$group” onde agrupamos o documento para os campos “title” e “order_status”. Em seguida, fornecemos o acumulador $min que agrupou os documentos obtendo os valores de preço mínimo dos campos não agrupados. Quando executamos esta consulta de $min acumulador abaixo, ele retorna os documentos agrupados por título e order_status em uma sequência. O preço mínimo aparece primeiro e o preço mais alto do documento é colocado por último.

Exemplo # 4: Use a Agregação $group com o Acumulador $sum

Para obter a soma de todos os campos numéricos usando o operador $group, a operação de acumulador $sum é implantada. Os valores não numéricos nas coleções são considerados por este acumulador. Além disso, estamos usando a agregação $match aqui com a agregação $group. A agregação $match aceita as condições de consulta fornecidas em um documento e passa o documento correspondente para a agregação $group que então retorna a soma do documento para cada grupo. Para o acumulador $sum, a consulta é apresentada a seguir.

>db.Books.aggregate([

{ $match:{ order_status:'Em estoque'}},

{ $grupo:{ _id:'$autor.nome', totalLivros: { $soma:1 } }

}])

A consulta de agregação acima começa com o operador $match que corresponde a todos os “order_status” cujo status é “In-Stock” e passado para o $group como entrada. Em seguida, o operador $group tem a expressão acumuladora $sum que gera a soma de todos os livros no estoque. Observe que o “$soma:1” soma 1 a cada documento que pertence ao mesmo grupo. A saída aqui mostrou apenas dois documentos agrupados que têm o “order_status” associado a “In-Stock”.

Exemplo # 5: Use a agregação $group com a agregação $sort

O operador $group aqui é usado com o operador “$sort” que é usado para classificar os documentos agrupados. A consulta a seguir tem três etapas para a operação de classificação. O primeiro é o estágio $match, depois o estágio $group e o último é o estágio $sort que classifica o documento agrupado.

>db.Books.aggregate([

{ $match:{ order_status:'esgotado'}},

{ $group:{ _id:{ authorName :'$author.name'}, totalBooks: { $sum:1} } },

{ $sort:{ authorName:1}}

])

Aqui, buscamos o documento correspondente cujo “status_pedido” está esgotado. Em seguida, o documento correspondente é inserido no estágio $group que agrupou o documento com o campo “authorName” e o “totalBooks”. A expressão $group está associada ao acumulador $sum para o número total de livros 'fora de estoque'. Os documentos agrupados são classificados com a expressão $sort em ordem crescente, pois “1” aqui indica a ordem crescente. O documento do grupo classificado na ordem especificada é obtido na saída a seguir.

Exemplo # 6: Use a agregação $group para valor distinto

O procedimento de agregação também agrupa os documentos por item usando o operador $group para extrair os valores de itens distintos. Vamos ter a expressão de consulta desta instrução no MongoDB.

>db.Books.aggregate( [ { $group : { _id : '$title' } } ] ).pretty();

A consulta de agregação é aplicada à coleção Books para obter o valor distinto do documento de grupo. O grupo $ aqui pega a expressão _id que gera os valores distintos conforme inserimos o campo “título” nele. A saída do documento do grupo é obtida ao executar esta consulta que possui o grupo de nomes de títulos no campo _id.

Conclusão

O guia teve como objetivo esclarecer o conceito do operador de agregação $group para agrupar o documento no banco de dados MongoDB. A abordagem agregada do MongoDB melhora os fenômenos de agrupamento. A estrutura de sintaxe do operador $group é demonstrada com os programas de exemplo. Além do exemplo básico dos operadores $group, também empregamos esse operador com alguns acumuladores como $push, $min, $sum e operadores como $match e $sort.