DEV Community

Cover image for MongoDB, find() e findOne()
Emanuel Ferreira
Emanuel Ferreira

Posted on

MongoDB, find() e findOne()

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"
}
Enter fullscreen mode Exit fullscreen mode

Exemplo do Comando

const query = { name: "Emanuel"}
const retorno = { name: 1, email: 1, password: 1}
const users = await db.users.find(query, retorno)
Enter fullscreen mode Exit fullscreen mode

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 })
Enter fullscreen mode Exit fullscreen mode

Retorno

[{ "_id": 12345678, "name": "Emanuel", "password": "123456", "email": "emanuel@gmail.com"}]
Enter fullscreen mode Exit fullscreen mode

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" });
Enter fullscreen mode Exit fullscreen mode

Retorno

{ "_id": 12345678, "name": "Emanuel", "password": "123456", "email": "emanuel@gmail.com"}
Enter fullscreen mode Exit fullscreen mode

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 });
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name" : "Emanuel", "email": "emanuel@gmail.com"}
Enter fullscreen mode Exit fullscreen mode

Exemplo com Dígito 0

Query

const users = await db.users.findOne({ name: "Emanuel" }, { name: 0 });
Enter fullscreen mode Exit fullscreen mode

Retorno

{"email": "emanuel@gmail.com", "password": "123456"}
Enter fullscreen mode Exit fullscreen mode

Como buscar em campos aninhados?

Vamos supor que o seu documento siga o padrão abaixo:

{
    "interests": {
       "id": { type: String },
       "name": { type: String }
    }
}
Enter fullscreen mode Exit fullscreen mode

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" }});
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name": "Emanuel", "email": "emanuel@gmail.com", "password": "123456"}
Enter fullscreen mode Exit fullscreen mode

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

Top comments (3)

Collapse
 
urielsouza29 profile image
Uriel dos Santos Souza • Edited

Opa!

Gostaria de recomendar o uso de #braziliandevs
Ideia desta moça neste post : dev.to/pachicodes/pt-br-por-que-es...

Abraços

Collapse
 
emanuelferreira profile image
Emanuel Ferreira

Bacana Uriel!! não sabia dessa, ja adicionei a tag já e vou começar a usar, muito obrigado!!

Collapse
 
urielsouza29 profile image
Uriel dos Santos Souza

Que bom! A ideia é boa e pode ajudar bastante a comunidade BR aqui!