DEV Community

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

Posted on

14 3

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

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

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!

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more