Regex e Querys - Wanderson304/MongoDB GitHub Wiki

Regex

Regex MongoDB
Doc de consultas

Associado a Operadores
Associado a Aggregation Framework

Outros

Consultas com filtros em MongoDB - Curso - Aula Grátis #20
Consultas MongoDB
#12 - Consultar Documento no MongoDB
MongoDB - Documento de consulta
MongoDB: Realizando Consultas
CONSULTAS AVANÇADAS COM MONGODB
Recurso de consulta --Eval - TOP

Outros

Select

_Os comandos abaixo usam a base de dados books e a collection books

Selecionar livors que tem mais que 500 Páginas
db.books.find({ pageCount: {$gt: 500}}).count();

Contar quantos livors tem mais que 500 Páginas
db.books.find({ pageCount: {$gt: 500}}).count();

Contar quantos itens tem em uma tabela (Conta as linhas)
db.books.find().count();

Selecionar todos os livros que tem mais que 300 Pgs e que é da categoria Microsoft (Usando AND)
db.books.find({ pageCount: {$gt: 300}, categories: "Microsoft"});

Selecionar todos os livros que sejam do autor "Bret Updegraff" ou que sejam da categoria "Mobile" (Usando OR)
db.books.find({ $or: [{authors: "Bret Updegraff"}, {categories: "Mobile"}]});

_Exemplos com o banco Restalrants _

Encontrar um restaurantes onde a nota é igual a 5
db.restaurantes.findOne({ rating: { $eq: 5 }})

Encontrar um restaurantes onde a nota é > 5 ou = 5
db.restaurantes.findOne({ rating: { $gte: 5 }})

Selecionar onde o type_of_food seja igual a "Breakfast" e rating >= 3 Usando AND db.restaurants.find({ type_of_food: "Breakfast", rating: { $gte: 3}}).pretty()

Conta a quantidade de rating que é < 2
db.restaurants.find({rating: { $lt: 2}}).count()

Conta a quantidade de rating que é < ou = 2
db.restaurants.find({rating: { $lte: 2}}).count()

Selecionar os type_of_food (Tipos de comida) que seja um dos: "Pizza" ou "China" Usando IN
Exibir qualquer um ou todos os itens que estiver na lista db.restaurants.find({ type_of_food: { $in: ["Pizza", "Chinese"]}}).pretty();

Selecionar um itens que o rating é diferente de 5
db.restaurants.findOne({ rating: { $ne: 5}});

Selecionar todos os itens que o rating é diferente de 5
Excluí da consulta todos os rating que é igual a 5
db.restaurants.find({ rating: { $ne: 5}});

Selecionar todos os itens que o type_of_food é diferente de Chinese
Excluí da consulta todos os type_of_food que é igual a Chines
db.restaurants.find({ type_of_food: { $ne: "Chinese"}});

Selecionar todos os itens onde existe o campo high_score
Pode ser aplicando por Ex: se esite campo Número, Nome, Idade, Idioma Etc ...
db.restaurants.find({high_score: {$exists: true}});

Usar o operador $text para realizar pesquisa em umcampo especifico - Usando LIKE

1º - Cria-se um index em um campo especifico. No examplo abaixo vamos criar no campo name de cada documento

db.restaurants.createIndex( { name: "text" } );

Em seguida pode usar o idex criado para realizar uma pesquisa no campo nome:

db.restaurants.find({ $text: {$search: "pizza"}});

Para mais detalhes sobre $text clique AQUI

Select avançado - consultas embedded - Saiba mais AQUI

Aqui usamos a collection pessoas da base masterselect

Selecionar todas as pessoas onde a cor dos olhos é igual a "castanhos"
db.pessoas.find({ "caracteristicas.cor_dos_olhos": "castanhos" });

Selecionar todas as pessoas onde a idade é maior que 20
db.pessoas.find({ "caracteristicas.idade":{$gt: 20}});

Selecionar todas as pessoas onde a idade é maior ou igual a 20
db.pessoas.find({ "caracteristicas.idade":{$gte: 20}});

Selecionar todas as pessoas onde a idade é menor que 28
db.pessoas.find({ "caracteristicas.idade":{$lt: 25}});

Selecionar todas as pessoas onde a cor dos olhos seja Verde ou [[Azuis" ou o quanto correpodenrem aos critérios dentro das chaves
Caso não tenha a cor Azuis ele vai retornar Verdes ou vice e versa. Caso não atenda nenhum dos critérios então nada será retornado. Aqui temos o resultado positivo se pelo menos um dos critérios for atendido - Usando IN
db.pessoas.find({ "caracteristicas.cor_dos_olhos":{$in:["Verde","Verdes", "Azuis"]}}).pretty()

Selecionar todas as pessoas onde o peso seja 80jk ou 92kg e a idade maior que 20
Aqui temos o resultado positivo somente se os dois criterios forem atendindos - Usando AND
db.pessoas.find({ "caracteristicas.peso":{$in:["80kg", "92kg"]}, "caracteristicas.idade" : { $gt: 20}})

Selecionar um Intem especifico dentro de um Array

Usando a colletion alunos

Selecionar todos os alunos que a nota em Matemática é igual a 6
db.alunos.find({matematica: 6});

Selecionar todos os alunos que 6, 8 ou ambos - Usando IN
db.alunos.find({matematica: {$in: [6,8]}});

Selecionar um array com os itens exato ou seja selecionar o Array onde as 4 notas seja 8, 8, 9, 7. Todos os critérios dentro do array devem ser correspondidos, caso contrario nada será retornado
db.alunos.find({ matematica: [8, 8, 9, 7] })

Selecionar um array com os itens parciais, ou seja buscar um array que contenha 8 e 7
Aqui a ordem dos itens não importa
db.alunos.find({ matematica: { $all: [8, 7]}});

COnsultas pelo tamanho do Array. Encontrar Array pela quantidade de elementos
Selecionar todos os Arrays que tem 4 itens
db.alunos.find({ matematica: { $size: 4}});

COnsultas pelo tamanho do Array. Encontrar Array pela quantidade de elementos
Selecionar todos os Arrays que tem 2 itens
db.alunos.find({ matematica: { $size: 2}});

selecionar documento onde a materia de quimica tenha duas notas
db.alunos.find( {quimica: {$size: 2}} )

Usando a colletion produtos

Selecionar array de documentos. O resultado será positivo somente se todos os itens da consulta forem encontrados
db.produtos.find({ "variacoes" : { cor: "Azul", "tamanho" : "M", "qtd" : 25 }}).pretty()

Operadores com array de documentos
Selecionar quais itens tem a quantidade maior que 30
db.produtos.find({"variacoes.qtd" : { $gt: 30}})

Selecionar quais item a cor é Azul
db.produtos.find({"variacoes.cor" : "Azul"})

Usando $elemMatch para realizar buscas customizadas. na consultas abaixo usamos dois argumentos:
tamanho: {$gt: 40} e cor: "Azul" porém podemos adicionais mais argumentos, isso faz com que
a consulta seja mais personalizada.
db.produtos.find({ variacoes: { $elemMatch: { tamanho: {$gt: 40}, cor: "Azul" }}}).pretty()

Outro exemplo usando $elemMatch:
db.produtos.find({ variacoes: { $elemMatch: { tamanho: {$lt: 38}, qtd: {$gt: 30} }}})

Filtrando campos de embedded. Determinar quais campos a consulta vai retornar Consultando um documento dentro de outro documento

Exemplo de um Documento pessoal

"_id" : ObjectId("6337b4ca2d7ac0717a1ebc19"),
........"nome" : "Carla",
........"caracteristicas" : {
.............."peso" : "72kg",
.............."alttura" : "1.72m",
.............."cor_dos_olhos" : "castanhos",
.............."idade" : 19

Retornando apenas o campo nome e idade de todos os documentos. A idade de dentro do subdocumento caracteristicas é retornada
devido ao filtro feiro no comando "caracteristicas.idade". Isso pode ser feitos para os demais campos do documento
db.pessoas.find({}, { nome: 1, "caracteristicas.idade": 1 })

Retornando apenas o campo nome, idade e peso
db.pessoas.find({}, { nome: 1, "caracteristicas.idade": 1, "caracteristicas.peso": 1 })

Removendo _id do retorno da consulta

Na consulta abaixo o _id: não será retorno pois estar desligado no comando _id: 0
db.pessoas.find({}, {_id: 0, nome: 1, idade: 1})

Retornar todos os campos, menos o _id:
db.pessoas({}, {_id: 0})

Removendo campos específicos

Na consulta abaixo os campos altura e cor_dos_olhos não serão retornados, pois o retorno
desses campos estão desligados nos comandos: altura:0 e cor_dos_olhos:0
No 1º par de chaves entende que todos os campos devem ser retornados na consulta, no segundo par de chaves excluí os campos que
não devem ser retornados na consulta. A ação pode ser aplicada em um ou vários campos
db.pessoas.find({}, {altura: 0, "caracteristicas.cor_dos_olhos": 0 })

Update

Atualizar o número de pages do livro onde o id é igual a 314, para 1000 Pgs. (Usando Update)
db.books.updateOne({_id: 314}, { $set: { pageCount: 1000 }});

Atualizar o titulo do livro com _id 20, para "Meu primeiro update"
db.books.updateOne({_id: 20}, { $set: { title: "Meu primeiro update" }});

Atualizar todos os livros da categoria Java, para o status "UNPUBLISHED". Atualizar vários itens
db.books.updateMany({ categories: "Java" }, { $set: { status: "UNPUBLISHED" }});

Adiconar o campo downloads em todos os documentos onde o author é igual a "Vikram Goval"
db.books.updateMany({ authors: "Vikram Goyal"}, { $set: { downloads: 1000 }});

Adicionar a todos os livros o campo "bestseller: true", onde o livro tem mais de 500 Pgs
db.books.updateMany({ pageCount: {$gt: 500}}, { $set: { bestseller: true }});

Substituir todos os campo do item com id=20, por novos dados (faz o replace)
db.books.replaceOne({ _id: 120 }, { foi: "Substituido"});

Inserir/atualizar um dado em um array dentro de um documento. O comando abaixo inserir PHP dentro do array categories, do documento onde o _id = 201 Saiba mais
db.books.updateOne({_id: 201}, { $push: { categories: "PHP"}});

Inserir/atualizar o campo atualizado:true, em todos os documentos da coleção (Usando UPDATE sem WHERE)
Se não realizar o filtro no primeiro par de chaves significa que tudoque estar dentro do segundo par de chaves
vai ser inserido em todos os documentos da collection
db.books.updateMany({}, { $set: {atualizado: true } });

Usando a collection alunos

Atualizando todos os documentos onde a matéria seja química
db.alunos.updateMany( {}, {$set: {quimica: [1, 2, 3, 4]}} )

Atualizandoa materia de quimica onde o aluno é Josias
Caso o campo Quimica não exista ele será criado
db.alunos.insertOne( {nome: 'Josias', quimica: [1, 20} )

Inserir a Flag ?? nos documentos onde a a Materia de quimica tenha apenas duas Notas
db.alunos.update( {quimica: {$size: 2}}, {$set: {falta_provas:true}})

Usando a collection blog

Atualizar / adicionar 2 ao total do postCount que já existe. Esse tipo de atualização pode aumenta ou diminuir usando + ou [[ - ]
db.blog.update({ author: "Matheus Battisti" }, { $inc: { postCount: 2 } })

Atualizar / diminuir 2 ao total do postCount que já existe. Esse tipo de atualização pode diminuir ou aumenta usando + ou [[ - ]
db.blog.update({ author: "Matheus Battisti" }, { $inc: { postCount: -2 } })

Atualizar / zerar um ou mais campos de um documento. Aqui o campo postCount do author Maicon Santos será zerado
db.blog.updateOne( { author: "Maicon Santos"}, { $min: { postCount: 0} });

Atualizar / zerar um ou mais campos de todos os documento. Aqui o campo postCount do author Maicon Santos será zerado
db.blog.updateMany( {}, { $min: { postCount: 0} });

Atualizando / definindo um ou mais campos de um documento. Aqui definimos o valor de 250 para o campo maxPosts
db.blog.updateOne({ author: "Matheus Battisti"}, {$max: { maxPosts: 250 }});

Atualizando / definindo um ou mais campos de todos os documento. Aqui definimos o valor de 250 para o campo maxPosts em todos os

documentos da collection blog
db.blog.updateMany({}, {$max: { maxPosts: 250 }});

Atualizar / Renomear o nome de um campo em um documento. O campo author será alterado para
author_fullname no documento onde o author é igual a Matheus Battisti
db.blog.updateOne({author: "Matheus Battisti"}, { $rename: { author: "author_teste" }}) ;

Atualizar / Renomear o nome de um campo em todos os documentos. O campo author será alterado para
author_fullname em todos os documentos da collection
db.blog.updateMany({}, { $rename: { author: "author_fullname" }}) ;

Atualizar / Remover um campo em todos os documentos. O campo active será removido de todos os documentos da collection
db.blog.updateMany({}, {$unset: { active: "" }})

Atualizar / Remover um campo de um documento. O campo active será removido do documento onde o author é igual a Matheus Battisti
db.blog.updateOne({author_fullname: "Matheus Battisti"}, {$unset: { active: "" }})

Atualizar um documento apenas com um item que não existe, caso ja exista o item, ele não será alterado
Abaixo estamos isnerindo 2 itens PHP e Vue porém apenas Vue será adicionado pois PHP ja existe no documento
Essa ação vale para qualquer item que já exista dentro do documento
db.blog.updateOne({ author_fullname: "Matheus Battisti"}, { $addToSet: { categories: { $each: ["PHP", "Vue"]}} });

Outro exemplo porém inserindo um item. JAVA será adicionado pois não existe no documento
db.blog.updateOne({ author_fullname: "Matheus Battisti"}, { $addToSet: { categories: { $each: ["JAVA"]}} });

Remover itens de um array

Remover o primeiro item do array categories

Esse remove sempre o 1º item do array, cuidado ! db.blog.updateOne({ author_fullname: "Matheus Battisti" }, { $pop: { categories: -1 }})

Remover o último item do array categories
db.blog.updateOne({ author_fullname: "Matheus Battisti" }, { $pop: { categories: 1 }})

Remover o vários itens do array categories onde o author_fullname é igual a Matheus Battisti

db.blog.updateOne({ author_fullname: "Matheus Battisti" }, { $pullAll: { categories: ["Linux","Docker"]}})

Adicionando itens em um array

Inserir um item na lista do array categories
db.blog.updateOne({ author_fullname: "Matheus Battisti"}, { $push: {categories: "Linux"}})

Inserir vários itens na lista do array categories onde o author_fullname é igual a Matheus Battisti
db.blog.updateMany({ author_fullname: "Matheus Battisti"}, { $push: {categories: { $each: ["Linux", "Windows", "Mac"] }}})

Inserirndo vários itens em todos os documdntos da collections blog
db.blog.updateMany({}, { $push: {categories: { $each: ["HTML", "CSS"] }}})

Delete

Deletar Itens duplicados
Remover um objecto dentro de um array mongodb

Deletar/excluir um item usando o id
db.books.deleteOne({_id: 20});

Deletar/excluir vários itens. Deletar todos os itens que pertence a categoria Java
db.books.deleteMany({categories: "Java"});

Deletar/excluir todos os itens de uma collection
db.books.deleteMany({});

Outros

Encontrando dados entre duas datas usando uma consulta nos gráficos do MongoDB
$elemMatch (query) - Consultas com vários parametros

⚠️ **GitHub.com Fallback** ⚠️