Skip to content

Instantly share code, notes, and snippets.

@lucassouza1
Created August 6, 2014 23:26
Show Gist options
  • Save lucassouza1/46835b6d32de7ef45a93 to your computer and use it in GitHub Desktop.
Save lucassouza1/46835b6d32de7ef45a93 to your computer and use it in GitHub Desktop.
Processamento de dados de Cotas Parlamentares
// Total de gastos por deputado por período
/*
Exemplo de documento
{
"_id" : ObjectId("53e2a0ae0364c1ab82d44333"),
"nome" : "ACÁCIO JÚNIOR (53a Legislatura)",
"deputado-id" : "2034",
"despesas" : [
{
"mes-ano" : NumberLong(2011001),
"nome" : "COMBUSTÍVEIS E LUBRIFICANTES.",
"registros" : [
{
"cnpj" : "07122807000499",
"fornecedor" : "PETRÓLEO E LUBRIFICANTES NOVARRUSSENSE LTDA",
"nf" : "1252",
"valor" : 3200
}
]
},
{
"mes-ano" : NumberLong(2011001),
"nome" : "Emissão Bilhete Aéreo\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t*",
"registros" : [
{
"cnpj" : "02012862000160",
"fornecedor" : "Cia Aérea - TAM",
"nf" : "Bilhete: 9572421411374",
"data-emissao" : "2011-01-20 00:00:00.0",
"passageiro" : "ACÁCIO JÚNIOR",
"trecho" : "FOR/BSB",
"valor" : 1459.62
},
{
"cnpj" : "02575829000148",
"fornecedor" : "Cia Aérea - AVIANCA",
"nf" : "Bilhete: 112-909057",
"data-emissao" : "2011-01-20 00:00:00.0",
"passageiro" : "ACÁCIO JÚNIOR",
"trecho" : "FOR/BSB",
"valor" : 818.62
}
]
}
]
}
*/
db.deputados.aggregate([
// Abre o array de despesas
{$unwind: "$despesas"},
// Abre o array de registro dentro das despesas
{$unwind: "$despesas.registros"},
// Agrupa por mes/ano e por nome
{$group: {
_id: {"mes-ano": "$despesas.mes-ano", "nome": "$nome"},
valorTotal: {$sum: "$despesas.registros.valor"},
}},
// Separa o mes do ano
{$project: {
_id: 0,
mes: {$substr: ["$_id.mes-ano", 5, 2]},
ano: {$substr: ["$_id.mes-ano", 0, 4]},
nome: "$_id.nome",
valorTotal: 1
}},
// Agrupa pelo nome e soh pelo ano
{$group: {
_id: {ano: "$ano", nome: "$nome"},
total: {$sum: "$valorTotal"}}},
// Ordena pelo menor valor
{$sort: {total: 1}},
// Agrupa soh pelo ano e adiciona os nomes e totais como array
{$group: {
_id: "$_id.ano",
dados: {$push: {nome: "$_id.nome", total: "$total"}}}},
{$sort: {_id: -1}}
])
/*
Exemplo de saida
{
"result" : [
{
"_id" : "2014",
"dados" : [
{
"nome" : "CAMILO COLA",
"total" : 10290.09
},
{
"nome" : "DANILO CABRAL",
"total" : 14304.94
},
{
"nome" : "BERINHO BANTIM",
"total" : 34923.43
},
{
"nome" : "CARLOS ALBERTO LERÉIA",
"total" : 46144.53
},
{
"nome" : "ANDREIA ZITO",
"total" : 56227.77
}
]
}
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment