Quinto projeto do módulo de Back-end do curso de desenvolvimento web da Trybe
Contexto
Dando continuidade aos estudos sobre NoSQL, no bloco desse trabalho aprendemos a realizar updates simples e complexos em MongoDB usando os métodos updateOne()
e updateMany()
.
Objetivo do projeto
Trabalhar com o banco de dados commerce
, que contém dados do cardápio do McDonald's, como ingredientes, valores nutricionais e dados fictícios de vendas. Devem ser criadas várias queries para praticar aprendizados de MongoDB já vistos e outros introduzidos no bloco desse projeto, como filtrar, fazer updates simples e complexos.
Principais habilidades desenvolvidas nesse trabalho
- Utilizar o método
updateOne()
eupdateMany()
; - Utilizar os operadores
$set
,$mul
,$inc
,$min
,$max
e$currentDate
; - Renomear campos e remover campos;
- Incorporar dados aos documentos através de arrays;
- Utilizar os operadores
$pop
,$pull
e$push
; - Utilizar o operador
$addToSet
; - Utilizar os operadores
$each
,$slice
e$sort
; - Utilizar o operador
$all
para filtrar documentos; - Utilizar o operador
$elemMatch
para filtrar documentos; - Utilizar o operador
$size
para filtrar documentos pelo tamanho de arrays; - Utilizar o operador
$expr
para criar expressões de agregação; - Utilizar expressões regulares e o operador
$regex
para buscar documentos; - Utilizar o índice textual e o operador
$text
; - Utilizar o operador
$mod
.
Tecnologia utilizada
1 - Inclua o campo criadoPor
em todos os documentos, colocando "Ronald McDonald"
no valor desse campo.
Para isso, escreva no arquivo desafio1.js
duas queries, nesta ordem:
-
Crie uma query que adicione o campo
criadoPor
em todos os documentos, colocando"Ronald McDonald"
no valor desse campo. -
Crie uma query que retorne o
nome
ecriadoPor
de todos os produtos.
2 - Inclua o campo valorUnitario
em todos os documentos em que esse campo não existe e atribua a ele o valor "0.00"
, com o tipo NumberDecimal
.
Para isso, escreva no arquivo desafio2.js
duas queries, nesta ordem:
-
Crie uma query que adicione o campo
valorUnitario
em todos os documentos em que esse campo não existe e atribua a ele o valor"0.00"
, com o tipoNumberDecimal
. -
Crie uma query que retorne o
nome
evalorUnitario
de todos os produtos.
Para isso, escreva no arquivo desafio3.js
quatro queries, nesta ordem:
-
Crie uma query que inclua o campo
avaliacao
do tipoNumberInt
e com o valor0
em todos os documentos da coleção. -
Crie uma query que incremente o valor do campo
avaliacao
em5
em todos os sanduíches de carne do tipobovino
. Dica: utilize como filtro o campotags
. -
Crie uma query que incremente o valor do campo
avaliacao
em3
em todos os sanduíches deave
. -
Crie uma query que retorne o
nome
eavaliacao
de todos os sanduíches.
Para isso, escreva no arquivo desafio4.js
duas queries, nesta ordem:
-
Crie uma query que atribua a data corrente ao campo
ultimaModificacao
no sanduícheBig Mac
. Para a data corrente faça uso do tipoDate
. -
Crie uma query que retorne o
nome
de todos os documentos em que o campoultimaModificacao
existe.
5 - Adicione ketchup
aos ingredientes
para todos os sanduíches menos o McChicken
, garantindo que não haja duplicidade nos ingredientes
.
Para isso, escreva no arquivo desafio5.js
duas queries, nesta ordem:
-
Crie uma query que adicione
ketchup
aosingredientes
para todos os sanduíches menos oMcChicken
, garantindo que não haja duplicidade nosingredientes
. -
Crie uma query que retorne o
nome
eingredientes
de todos os documentos.
Para isso, escreva no arquivo desafio6.js
duas queries, nesta ordem:
-
Crie uma query que faça a inclusão de
bacon
no final da lista deingredientes
dos sanduíchesBig Mac
eQuarteirão com Queijo
. -
Crie uma query que retorne o
nome
eingredientes
de todos os documentos.
Para isso, escreva no arquivo desafio7.js
duas queries, nesta ordem:
-
Crie uma query que faça a remoção do item
cebola
em todos os sanduíches. -
Crie uma query que retorne o
nome
eingredientes
de todos os documentos.
Para isso, escreva no arquivo desafio8.js
duas queries, nesta ordem:
-
Crie uma query que faça a remoção do primeiro
ingrediente
no sanduícheQuarteirão com Queijo
. -
Crie uma query que retorne o
nome
eingredientes
de todos os documentos.
Para isso, escreva no arquivo desafio9.js
duas queries, nesta ordem:
-
Crie uma query que faça a remoção do último
ingrediente
no sanduícheCheddar McMelt
. -
Crie uma query que retorne o
nome
eingredientes
de todos os documentos.
Para isso, escreva no arquivo desafio10.js
quatro queries, nesta ordem:
- Crie uma query que inclua um array com sete posições em todos os sanduíches. Cada uma delas representará um dia da semana, e cada posição iniciará em
0
. O array deve se parecer como abaixo:"vendasPorDia": [0, 0, 0, 0, 0, 0, 0]
- O primeiro item desse array representa as vendas no domingo, o segundo item representa as vendas na segunda-feira, e assim até chegar ao último item, que representa as vendas no sábado.
-
Crie uma query que incremente as vendas de
Big Mac
às quartas-feiras em60
. -
Crie uma query que incremente as vendas de todos os sanduíches de carne do tipo
bovino
epão
aos sábados em120
. -
Crie uma query que retorne o
nome
evendasPorDia
de todos os documentos.
11 - Insira os elementos combo
e tasty
no array tags
de todos os sanduíches e aproveite para deixar os elementos em ordem alfabética ascendente.
Para isso, escreva no arquivo desafio11.js
duas queries, nesta ordem:
-
Crie uma query que faça tanto a inserção dos elementos
combo
etasty
no arraytags
de todos os sanduíches quanto a ordenação dos elementos detags
em ordem alfabética ascendente. -
Crie uma query que retorne o
nome
etags
de todos os documentos.
12 - Ordene em todos os documentos os elementos do array valoresNutricionais
pelo campo percentual
de forma descendente.
Para isso, escreva no arquivo desafio12.js
duas queries, nesta ordem:
-
Crie uma query que faça em todos os documentos a ordenação dos elementos do array
valoresNutricionais
pelo campopercentual
de forma descendente. Dica: mesmo sem adicionar nenhum novo elemento, para essa operação é necessário utilizar também o modificador$each
. -
Crie uma query que retorne o
nome
evaloresNutricionais
de todos os documentos.
13 - Adicione o elemento muito sódio
ao final do array tags
nos produtos em que o percentual
de sódio
seja maior ou igual a 40
.
Para isso, escreva no arquivo desafio13.js
duas queries, nesta ordem:
-
Crie uma query que faça a adição do elemento
muito sódio
ao final do arraytags
nos produtos em que opercentual
desódio
seja maior ou igual a40
. -
Crie uma query que retorne o
nome
etags
de todos os documentos.
14 - Adicione o elemento contém sódio
ao final do array tags
nos produtos em que o percentual
de sódio
seja maior do que 20
e menor do que 40
.
Para isso, escreva no arquivo desafio14.js
duas queries, nesta ordem:
-
Crie uma query que faça a adição do elemento
contém sódio
ao final do arraytags
nos produtos em que opercentual
desódio
seja maior do que20
e menor do que40
. -
Crie uma query que retorne o
nome
etags
de todos os documentos.
Para isso, escreva no arquivo desafio17.js
duas queries, nesta ordem:
-
Crie uma query que faça a criação de um índice do tipo
text
no campodescricao
com o idioma padrãoportuguese
. -
Crie uma query que retorne a quantidade de documentos que contêm as palavras
frango
ouhamburguer
utilizando o operador$text
.
Para isso, escreva no arquivo desafio18.js
duas queries, nesta ordem:
-
Crie uma query que faça a criação de um índice do tipo
text
no campodescricao
com o idioma padrãoportuguese
. -
Crie uma query que retorne a quantidade de documentos que contêm a expressão
feito com
utilizando o operador$text
.
Para isso, escreva no arquivo desafio19.js
duas queries, nesta ordem:
-
Crie uma query que faça a renomeação do campo
descricao
paradescricaoSite
em todos os documentos. -
Crie uma query que retorne o
nome
,descricao
edescricaoSite
de todos os documentos.
Para isso, escreva no arquivo desafio20.js
duas queries, nesta ordem:
-
Crie uma query que faça a remoção do campo
curtidas
do itemBig Mac
. -
Crie uma query que retorne o
nome
ecurtidas
de todos os documentos.