Skip to content

RodrigoNeoEx/MongoDB-Aggregations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Boas vindas ao repositório do projeto MongoDB-Aggregations!

Não postado banco de dados devido Propriedade Intelectual

Projeto elaborado e proposto as pessoas estudantes da Trybe

Projeto executado com aproximadamente 7 meses de curso.

Este projeto não foi refatorado, permanece com mesma estrura ao feito originalmente.

---

Habilidades

Neste projeto você será capaz de:

  • Executar buscas complexas no banco mongoDB
  • Usar os operadores de aggregation para fazer uma pipeline

Requisitos do projeto

Lista de requisitos

Monte queries para encontrar as informações dos desafios a seguir.


Desafio 1

Ajude a Trybe a escolher um filme para a próxima noite! Baseado em uma pesquisa, decidimos que os filmes em potencial devem atender alguns critérios, vejamos:

Retorne todos os filmes que satisfaça, através de uma pipeline, as condições abaixo

  • imdb.rating deve ser ao menos 7;
  • genres não deve conter Crime ou Horror;
  • rated deve ser igual a PG ou G;
  • languages contém English e Spanish.
  • Utilize a coleção movies.

Sua query deve retornar 41 documentos.

Desafio 2

A escolha do filme da noite foi um sucesso, mas infelizmente ficamos com nossa banda de internet quase esgotada, e ainda precisamos de uma nova recomendação de filme. Para diminuir o volume de dados trafegados:

Utilizando o mesmo pipeline anterior, retorne apenas os campos title, rated, imdb.rating, imdb.votes e year, modificando seus nomes para titulo, avaliado, notaIMDB, votosIMDB e ano, respectivamente.

O resultado da sua query deve ter o seguinte formato:

{ "titulo" : "A Streetcar Named Desire", "avaliado" : "PG", "notaIMDB" : 8.1, "votosIMDB" : 72364, "ano" : 1951 }
// Demais documentos

Desafio 3

Agora que você tem os campos essenciais, aplique mais um estágio na pipeline do desafio anterior que atenda a seguinte demanda:

Retorne esses filmes ordenados por ano e nota IMDB de forma decrescente e por ordem alfabética.

O resultado da sua query deve ter o seguinte formato:

{ "titulo" : "McFarland, USA", "avaliado" : "PG", "notaIMDB" : 7.5, "votosIMDB" : 14091, "ano" : 2015 }
// Demais documentos

Desafio 4

Nosso dataset de filmes tem muitos documentos diferentes, alguns com títulos "mais complexos" do que outros. Se quisermos analisar nossa coleção para encontrar títulos de filmes que têm uma só palavra no título, poderíamos buscar todos os filmes do dataset e processar isso na aplicação, mas o Aggregation Framework nos permite fazer isso diretamente no lado do banco de dados.

Crie uma pipeline que retorna documentos com o novo campo title_split, ela deve seguir as seguintes condições:

  • title_split deve conter uma lista de palavras presentes em title.
  • A pipeline deve retornar apenas filmes com o título composto apenas de uma palavra.
  • A pipeline deve ser ordenada por title em ordem alfabética.

Por exemplo, "Cinderela" e "3-25" devem entrar nessa contagem, mas "Cast Away" não.

Dica: utilize os operadores $split, $size e $sort para te auxiliar. Documentação do $split

Sua query deve retornar 8068 documentos.

Desafio 5

Temos outra noite de filme aqui na Trybe e, desta vez, nós perguntamos à equipe quais são seus atores ou atrizes preferidos. Aqui está o resultado:

  • Sandra Bullock
  • Tom Hanks
  • Julia Roberts
  • Kevin Spacey
  • George Clooney

Considerando esta lista, crie uma pipeline que retorne o title do vigésimo quinto filme da agregação que satisfaz as seguintes condições:

  • countries é Estados unidos (Utilize a sigla)
  • tomatoes.viewer.rating maior ou igual a 3
  • Crie um novo campo chamado num_favs, que represente quantos atores ou atrizes da nossa lista de favoritos aparecem no elenco (campo cast) do filme.
  • Ordene os resultados por num_favs, tomatoes.viewer.rating e title, todos em ordem decrescente.

Dica: coloque a lista de atores e atrizes favoritos em uma variável e explore operadores como $size e $setIntersection.

O resultado da sua query deve ter o seguinte formato:

{ "title" : <nome_do_filme> }

Desafio 6

Vamos explorar mais operadores aritméticos!

Considerando todos os filmes que ganharam o Oscar pelo menos uma vez, calcule o maior valor, menor valor, média e o desvio padrão das avaliações (campo imdb.rating)

  • Para a média e o desvio padrão arredonde os valores para uma casa decimal utilizando o $round.

Dica: todos os filmes na coleção, que já ganharam um Oscar, começam com uma sequência de string parecida com essas abaixo, portanto $regex é um operador bem-vindo:

Won 10 Oscars
Won 1 Oscar

Utilizem o $stdDevSamp para calcular o desvio padrão.

O resultado da sua query deve ter o seguinte formato:

{
  "maior_rating" : <maior_rating>,
  "menor_rating" : <menor_rating>,
  "media_rating" : <media_rating>,
  "desvio_padrao" : <desvio_padrao>
}

Desafio 7

Vamos nos aprofundar um pouco mais em nossa coleção de filmes.

Conte quantos filmes cada um dos atores e atrizes do elenco (cast) já participou e obter uma média do campo imdb.rating para cada um desses atores e atrizes.

  • Traga o nome do ator ou atriz, número de filmes em que participou e a média do imdb desses filmes arredondada para uma casa decimal usando o operador $round.
  • Considere somente os membros do elenco de filmes com o idioma inglês (English).
  • Exiba a lista em ordem decrescente de documentos pelo número de filmes e nome do ator ou atriz.

Sua query deve retornar 47055 documentos. Cada documento no resultado deve ter o seguinte formato:

{ "_id" : "John Wayne", "numeroFilmes" : 107, "mediaIMDB" : 6.4 }

Desafio 8

Trocando de contexto, vamos utilizar nosso outro dataset que contém dados de empresas aéreas, suas rotas, seus voos e parcerias.

Liste todas as parcerias da coleção air_alliances, que voam rotas com um Boing 747 ou um Airbus A380 , para descobrir qual delas tem o maior número de rotas com esses aviões.

No campo airplane, na coleção air_routes:

  • Boing 747 está abreviado para 747
  • Airbus A380 está abreviado para 380

O resultado da sua query deve ter o seguinte formato:

{ "_id" : <nome_da_alianca>, "totalRotas" : <total_de_rotas> }

Desafio 9

A partir da coleção trips, determine o menor e o maior ano de nascimento.

  • Guarde essa informação, você precisará dela mais tarde.

  • Não considere documentos com valores vazios ("") e em que o campo não existe!

  • Para este desafio utilize o operador $toInt para converter de string para valor inteiro.

O resultado da sua query deve ter o seguinte formato:

{ "maiorAnoNascimento" : <ano>, "menorAnoNascimento" : <ano> }

Desafio 10

Encontre a duração média de viagens por tipo de usuário.

  • Exiba o valor em horas com apenas duas casas decimais
  • Exiba a média de viagens ordenada de forma crescente.

Para arredondar a média use o $round.

O resultado da sua query deve ter o seguinte formato:

{ "tipo" : <tipo>, "duracaoMedia" : <duracaoMedia> }
// ...

Desafio 11

Determine qual o dia da semana com maior número de viagens iniciadas.

Dica: Utilize o operador $dayOfWeek para extrair o dia da semana como um número de uma data.

O resultado da sua query deve ter o seguinte formato:

{ "diaDaSemana" : <dia_da_semana>, "total" : <total_de_viagens> }

Desafio 12

Usando a pipeline anterior que retorna o dia com mais viagens, determine qual estação tem o maior número de viagens nesse dia da semana.

  • Exiba apenas o nome da estação e o total de viagens.

Dica: Utilize o operador $dayOfWeek para extrair o dia da semana como um número de uma data.

O resultado da sua query deve ter o seguinte formato:

{ "nomeEstacao" : <nome_da_estacao>, "total" : <total_de_viagens> }

Desafio 13

Determine a duração média das viagens iniciadas no dia 10/03/2016, em minutos.

  • Arredonde o resultado para cima.

O resultado da sua query deve ter o seguinte formato:

{ "duracaoMediaEmMinutos" : <duracao_media_em_minutos> }

Desafio 14

Baseado na duração média das viagens, determine quais são as 5 bicicletas que foram mais utilizadas.

  • Exiba o resultado em minutos arredondados para cima e em ordem decrescente.

O resultado da sua query deve ter o seguinte formato:

{ "bikeId" : <bike_id>, "duracaoMedia" : <duracao_media> }
{ "bikeId" : <bike_id>, "duracaoMedia" : <duracao_media> }
{ "bikeId" : <bike_id>, "duracaoMedia" : <duracao_media> }
{ "bikeId" : <bike_id>, "duracaoMedia" : <duracao_media> }
{ "bikeId" : <bike_id>, "duracaoMedia" : <duracao_media> }

About

Executar buscas e utilizar operadores mais complexos na construção de pipelines com MongoDB Aggregation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors