MongoDB, find() e findOne()
Emanuel Ferreira
Posted on May 25, 2021
Métodos
Para fazer uma busca por documento no MongoDB utilizamos os métodos find() e findOne(), que recebem dois tipos de parâmetro: a query, que irá fazer a busca no nosso banco de dados e o segundo parâmetro, que dizemos o que será retornado.
Nosso Documento
{
"name": "Emanuel",
"password": "123456",
"email": "emanuel@gmail.com"
}
Exemplo do Comando
const query = { name: "Emanuel"}
const retorno = { name: 1, email: 1, password: 1}
const users = await db.users.find(query, retorno)
Método find
O Método find retorna uma array com todos os documentos que foram encontrados utilizando o campo name
.
Query
const users = await db.users.find({ name: Emanuel })
Retorno
[{ "_id": 12345678, "name": "Emanuel", "password": "123456", "email": "emanuel@gmail.com"}]
Método findOne
O Método findOne retorna o primeiro documento que ele encontrar na collection que corresponda com o campo name.
Query
const users = await db.users.findOne({ name: "Emanuel" });
Retorno
{ "_id": 12345678, "name": "Emanuel", "password": "123456", "email": "emanuel@gmail.com"}
Como retornar campos específicos?
No MongoDB, quando desejamos retornar dados específicos de um documento, usamos um segundo parâmetro que é um objeto passando o nome do campo como chave e o valor sendo 0 ou 1.
Para cada campo que você deseja retornar do seu documento, você utiliza o dígito 1.
Após utilizar o dígito 1 você não pode utilizar o digito 0, que remove algum campo do retorno e vice-versa.
Exemplo com Dígito 1
Query
const users = await db.users.findOne({ name: "Emanuel" }, { name: 1, email: 1 });
Retorno
{"name" : "Emanuel", "email": "emanuel@gmail.com"}
Exemplo com Dígito 0
Query
const users = await db.users.findOne({ name: "Emanuel" }, { name: 0 });
Retorno
{"email": "emanuel@gmail.com", "password": "123456"}
Como buscar em campos aninhados?
Vamos supor que o seu documento siga o padrão abaixo:
{
"interests": {
"id": { type: String },
"name": { type: String }
}
}
Para acessar o campo id ou o campo name você pode utilizar:
Exemplo
const users = await db.users.findOne({ 'interests.name': "Emanuel" });
//Disponível apenas na versão 4.4 do MongoDB
const users = await db.users.findOne({ interests: { name: "Emanuel" }});
Retorno
{"name": "Emanuel", "email": "emanuel@gmail.com", "password": "123456"}
Conclusão
Então, utilizamos o método find quando desejamos retornar mais de um resultado e método findOne quando desejamos retornar somente um resultado. Assim, melhorando até a perfomance da query.
Linkedin: Emanuel Ferreira
Email: contatoferreirads@gmail.com
Revisão do Texto: Ana Julia Lima
Posted on May 25, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.