Estou um pouco atrasada com o assunto consultas no MongoDB, e por isso gostaria de começar este post pedindo desculpas… Mas foi por um bom motivo! O blog foi totalmente repaginado! E eu gostaria de aproveitar e te convidar para se cadastrar no blog. Juro que não vou vender seus dados e nem mandar spam! A idéia é te manter informado de:
- Posts bacanas;
- E-books publicados
- Eventos gratuitos;
- Promoções e sorteios do blog e de parceiros.
O primeiro item que eu vou te enviar, é um e-book com as minhas 3 melhores dicas para você construir excelentes aplicativos.
Vamos então ao MongoDB…
Depois de criar seu banco de dados, criar suas coleções e salvar seus documentos provavelmente você precisará consultar seus dados.
Como você já sabe a linguagem de consulta no MongoDB não é a linguagem SQL, mas não se assuste, porque não é complicado. Você só precisa seguir os passos abaixo.
Passo 1 – Conheça a função find()
Para fazer consultas usando o MongoDB é indispensável que você conheça a função find()!
Ela busca os dados no MongoDB e tem 2 paramêtros principais:
-
- Um filtra documentos que obedecem uma ou várias condições
- Outro filtra os atributos que serão exibidos ou ocultados do resultado da query;
Atente-se ao fato de que por padrão todos os atributos são exibidos no retorno da query;
A sintaxe básica é:
db.NomeColeção.find({condição}, {atributos exibidos ou não})
Passo 2 – Conheça os parâmetros da função find()
Imagine que você tem um documento com 50 atributos e precisa exibir somente um deles. Nesta situação você usará o segundo parâmetro da função find(), informando todos os atributos que serão exibidos.
A sintaxe é:
db.NomeColeção.find({condição}, {atributo:1})
Somente o atributo especificado será exibido
Da mesma forma se você quiser ocultar algum atributo pode usar a sintaxe abaixo:
db.NomeColeção.find({condição}, {atributo:0})
Todos os atributos com exceção do atributo especificado serão exibidos
Passo 3 – Ordene o resultado da sua consulta
Para ordenar o retorno de uma consulta podemos usar a função sort(), indicando o atributo que será usado na ordenação e indicando se a ordenação será crescente (1) ou decrescente (0).
-
- Ordem crescente:
- db.NomeColeção.find().sort({nomeAtributo:1, nomeOutroAtributo:1,…})
- Ordem decrescente:
- db.NomeColeção.find().sort({nomeAtributo:0, nomeOutroAtributo:0,…})
- Ordem crescente:
Passo 4 – Limite a quantidade de documentos que a sua consulta vai retornar
Para limitar a quantidade de documentos retornados em uma query usamos a função limit().
db.NomeColeção.find().limit(número registros)
Passo 5 – Retorne os valores únicos de um atributo
Para consultar os valores distintos de um atributo existente nos documentos de uma coleção é possível usar a função distinct.
db.NomeColeção.distinct(nome do atributo)
Passo 6 – Crie filtros para buscar documentos
A função find permite que seja realizado um filtro para buscar documentos. Por exemplo, você pode estar procurando somente documentos cujo valor de um atributo que seja maior ou igual a um valor. Se estivéssemos usando a sintaxe SQL, estaríamos tratando da clausula WHERE, onde o retorno de uma consulta obedece a uma determinada condição.
Sintaxe:
db.NomeColeção.find({nomeAtributo: {operador : valor}})
Passo 7 – Conheça os operadores
Para filtrar documentos você precisará conhecer os operadores listados a seguir:
- $and – operador lógico AND
- $or – operador lógico OR
- $not – operador lógico NOT
- $gt = maior que
- $lt = menor que
- $gte = maior ou igual
- $lte = menor ou igual
- $ne = diferente de
- $in = todos os documentos cujo atributo possui um dos valores especificados (no SQL operador IN)
- $nin = todos os documentos cujo atributo não possui um dos valores especificados (no SQL operador NOT IN)
Passo 8 – Obtenha um único documento
Suponha que você deseja fazer uma consulta que retorne somente um resultado e não quer usar a função limit(1). Neste caso você pode usar a função findOne() que a mesma sintaxe da função find.
db.NomeColeção.findOne({condição}, {atributos exibidos ou não})
Passo 9 – Exiba um documento JSON formatado
Suponha que você está fazendo o debug da sua aplicação e precisa verificar um documento armazenado no MongoDB… Concorda comigo que esta missão é muito mais fácil se o seu documento estiver formatado?
Para isso você pode usar a função .pretty(), que pode ser usada com a função find() e findOne()
db.NomeColeção.find({condição}, {atributos exibidos ou não}).pretty()
Ou
db.NomeColeção.findOne({condição}, {atributos exibidos ou não}).pretty()
Passo 10 – Conte a quantidade de documentos que uma query vai retornar
Se você precisa contar a quantidade de documentos que uma consulta irá retornar use a função count()
db.NomeColeção.find({condição}, {atributos exibidos ou não}).count()
Dica Bônus!!!
Faça testes!!! Avalie as possibilidades de consultas no MongoDB, e você verá que existem muitas!
Combine funções, estabeleça condições, teste operadores, teste, tente, comece e recomece!
Vamos treinar?
Criar um banco de dados
use DB4B
Criar Coleção
db.createCollection(“Atividades”)
Verificar as informações de uma coleção
db.Atividades.validate()
Verificar as coleções criadas no Banco de Dados
show collections
Criar variáveis usadas nos próximos exemplos
Criar variável chamada documento
documento = ({
“NomeSite”: “db4beginners.com”,
“categoria”: “CriarArtigo”,
“DataPrevista”: “09-23-2017”,
“keyWords”: [
“mongoDB”,
“DB4B”,
“Banco de Dados”,
“NoSQL”
],
“Finalizado”:false
})
documentoX = ({
“Site”: “db4beginners.com”,
“Categoria”: “CriarArtigo”,
“DataPublicação”: “09-23-2017”,
“PalavrasChave”: [
“mongoDB”,
“DB4B”,
“Banco de Dados”,
“NoSQL”
]})
Criar variável chamada documento1
documento1= ({
“NomeSite”: “db4beginners.com”,
“titulo”: “Instalação MongoDB”,
“categoria”: “ValidarArtigo”,
“DataPrevista”: “09-24-2017”,
“DataPublicaçao”: “09-25-2017”,
“keyWords”: [
“mongoDB”,
“DB4B”,
“Banco de Dados”,
“NoSQL”
],
“Finalizado”:true
});
Criar variável chamada documento2
documento2= ({
“_id” : “Dani”,
“NomeSite”: “DB4B.co“,
“titulo”: “Certificação SQL Server”,
“categoria”: “Gravar Vídeo”,
“Canal Youtube”: “DB4Beginners”,
“keyWords”: [
“SQL Server 2016”,
“70-761”,
“Banco de Dados”,
“Relacional”
],
“Finalizado”:true
})
Inserir um documento na coleção
db.Atividades.insert(documento)
OU
db.Atividades.insertOne(documento)
Inserir vários documentos em uma coleção
db.Atividades.insertMany([documento1, documento2])
Mostrar a quantidade de documentos em uma coleção
db.Atividades.count()
Mostrar todos os documentos da coleção
db.Atividades.find()
Mostrar todos os documentos da coleção, de forma organizada
db.Atividades.find().pretty()
Mostrar somente o primeiro documento da coleção
db.Atividades.findOne()
Mostrar todos os documentos da coleção sem exibir o atributo _id
db.Atividades.find({}, {_id:0})
Ordenar retorno query
Ordem crescente:
db.Atividades.find().sort({categoria:1}).pretty()
Ordem decrescente:
db.Atividades.find().sort({categoria:-1}).pretty()
Limitar a quantidade de documentos retornados
db.Atividades.find().limit(2).pretty()
Retornar os valores únicos de um atributo de uma coleção
db.Atividades.distinct(“categoria”)
Buscar todos os documentos com o atributo Finalizado = False e não mostrar o atributo _id
db.Atividades.find({Finalizado : false} , {_id :0})
Conclusão
Não é uma tarefa impossível fazer consultas no MongoDB, trocamos o comando SELECT pela função find() e as suas possibilidades.
Mudar a linguagem de consulta nos mostra que é mais importante saber o que estamos procurando do que os comandos que serão usados. Por isso repito a dica bônus… Faça testes!
Referências
Se você tem alguma dúvida, é só me procurar no Twitter, ou no facebook, ou comentando este post, ou no formulário de contato. Não se preocupe… Eu sempre respondo (mesmo que seja para avisar que estou pesquisando).
Livro: Introdução ao MongoDB
Photo by jasoneppink on Visual hunt / CC BY