Advertisements

As operações de agregação processam registros de dados e retornam resultados computados. As operações de agregação agrupam valores de múltiplos documentos e podem realizar uma variedade de operações sobre os dados agrupados para retornar um único resultado. Na contagem SQL(*) e com agrupamento por é um equivalente da agregação MongoDB.

O método agregado()

Para a agregação no MongoDB, você deve usar o método agregado().

Sintaxe

Sintaxe básica do método aggregate() é como segue –

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Exemplo

Na coleção você tem os seguintes dados –

{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 100},{ _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 10},{ _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: , likes: 750},

Agregar a partir da coleção acima, se você quiser exibir uma lista indicando quantos tutoriais são escritos por cada usuário, então você usará o seguinte método agregado() –

> db.mycol.aggregate(){ "_id" : "tutorials point", "num_tutorial" : 2 }{ "_id" : "Neo4j", "num_tutorial" : 1 }>

Sql consulta equivalente para o caso de uso acima será selecionado por_usuário, contagem(*) do grupo mycol por_usuário.

No exemplo acima, nós agrupamos documentos por campo por_usuário e em cada ocorrência de por usuário o valor anterior da soma é incrementado. Segue uma lista de expressões de agregação disponíveis.

>

Expressão Descrição Exemplo
$sum Soma acima do valor definido de todos os documentos da coleção. db.mycol.agregado()
$avg Calcula a média de todos os valores definidos de todos os documentos do acervo. db.mycol.agregado()
$min Calcula o mínimo dos valores correspondentes de todos os documentos do acervo. db.mycol.aggregate()
$max E obtém o máximo dos valores correspondentes de todos os documentos do acervo. db.mycol.aggregate()
$push Insere o valor a um array no documento resultante. db.mycol.aggregate()
$addToSet Insere o valor a um array no documento resultante mas não cria duplicatas. db.mycol.aggregate()
$first Obtém o primeiro documento a partir dos documentos originais de acordo com o agrupamento. Normalmente isto só faz sentido junto com alguns previamente aplicados “$sort”-stage. db.mycol.aggregate()
$last Pega o último documento dos documentos de origem de acordo com o agrupamento. Normalmente isto só faz sentido junto com alguns previamente aplicados “$sort”-stage. db.mycol.aggregate()

Pipeline Concept

No comando UNIX, shell pipeline significa a possibilidade de executar uma operação em alguma entrada e usar a saída como a entrada para o próximo comando e assim por diante. O MongoDB também suporta o mesmo conceito no framework de agregação. Há um conjunto de etapas possíveis e cada uma delas é tomada como um conjunto de documentos como um input e produz um conjunto de documentos resultante (ou o documento final JSON resultante no final do pipeline). Isto, por sua vez, pode ser usado para a próxima etapa e assim por diante.

Seguir-se-ão as possíveis etapas no framework de agregação –

  • $project – Usado para seleccionar alguns campos específicos de uma colecção.

  • $match – Esta é uma operação de filtragem e portanto pode reduzir a quantidade de documentos que são dados como entrada para a próxima etapa.

  • $group – Isto faz a agregação real como discutido acima.

  • $sort – Ordena os documentos.

  • $skip – Com isto, é possível saltar na lista de documentos para uma determinada quantidade de documentos.

  • $limite – Isto limita a quantidade de documentos a olhar, pelo número dado a partir das posições atuais.

  • $unwind – Isto é usado para desenrolar documentos que estão usando arrays. Quando se usa um array, os dados são tipo pré-juntos e esta operação será desfeita com isto para ter documentos individuais novamente. Assim com esta etapa aumentaremos a quantidade de documentos para a próxima etapa.

Advertisements

Deixe uma resposta

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