sábado, 3 de maio de 2014

Neste Post, vamos ver como usar a função Aggregate do MongoDB para agrupar documentos (dados).

No exemplo a seguir podemos ver os dados em formato JSON, que mostram os provedores de hospedagem de sites.
website.json



{ "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
{ "_id" : 2, "domainName" : "test2.com", "hosting" : "aws.amazon.com"}
{ "_id" : 3, "domainName" : "test3.com", "hosting" : "aws.amazon.com" }
{ "_id" : 4, "domainName" : "test4.com", "hosting" : "hostgator.com" }
{ "_id" : 5, "domainName" : "test5.com", "hosting" : "aws.amazon.com" }
{ "_id" : 6, "domainName" : "test6.com", "hosting" : "cloud.google.com" }
{ "_id" : 7, "domainName" : "test7.com", "hosting" : "aws.amazon.com" }
{ "_id" : 8, "domainName" : "test8.com", "hosting" : "hostgator.com" }
{ "_id" : 9, "domainName" : "test9.com", "hosting" : "cloud.google.com" }
{ "_id" : 10, "domainName" : "test10.com", "hosting" : "godaddy.com" }





As importações para a coleção "website".
> mongoimport -d testdb -c website --file website.json
connected to: 127.0.0.1
Mon Jan 13 14:30:22.662 imported 10 objects

Nota
Se a coleção existir, adicione a opção -upsert para substituir os dados.
> mongoimport -d testdb -c website --file website.json --upsert

Exemplos de Agrupamentos

Neste exemplo iremos utilizar db.collection.aggregate e $group para obter um agrupamento de dados;

A seguir os dados serão agrupados pelo campo "hosting" e será exibida a soma total de cada um deles.
> db.website.aggregate(
{
$group : {_id : "$hosting", total : { $sum : 1 }}
}
);

Output:
{
"result" : [
{
"_id" : "godaddy.com",
"total" : 1
},
{
"_id" : "cloud.google.com",
"total" : 2
},
{
"_id" : "aws.amazon.com",
"total" : 4
},
{
"_id" : "hostgator.com",
"total" : 3
}
],
"ok" : 1
}

Seria o equivalente em SQL
SELECT hosting, SUM(hosting) AS total
FROM website
GROUP BY hosting

Adicionando uma triagem com o comando $sort
>  db.website.aggregate(
{
$group : {_id : "$hosting", total : { $sum : 1 }}
},
{
$sort : {total : -1}
}
);

Output - Apresentará o  "total" em ordem decrescente. Por ordem crescente, os usos $sort : {total : 1}
{
"result" : [
{
"_id" : "aws.amazon.com",
"total" : 4
},
{
"_id" : "hostgator.com",
"total" : 3
},
{
"_id" : "cloud.google.com",
"total" : 2
},
{
"_id" : "godaddy.com",
"total" : 1
}
],
"ok" : 1
}

Agora vamos adicionar a condição $match, para agrupar os dados de "hosting" apenas para "aws.amazon.com".
> db.website.aggregate(
{
$match : {hosting : "aws.amazon.com"}
},
{
$group : { _id : "$hosting", total : { $sum : 1 } }
}
);

Output
{
"result" : [
{
"_id" : "aws.amazon.com",
"total" : 4
}
],
"ok" : 1
}

Mais exemplos podem ser encontrados em MongoDB Aggregation guide

 

0 comentários:

Postar um comentário

Blog Archive

SmarttNet Solution Provider. Tecnologia do Blogger.

Postagens populares

Twitter MongoDBBrazil

Total de visualizações de página