MongoDB com drivers
Esta página documenta um método mongosh. Para ver o método equivalente em um driver MongoDB, consulte a página correspondente da sua linguagem de programação:
Definição
db.collection.findOne(query, projection, options)Retorna um documento que satisfaça os critérios de query especificados na coleção ou visualização.
O documento devolvido pode variar dependendo do número de documentos que correspondem aos critérios de consulta e do plano de consulta usado:
Número de documentos correspondentesPlano de queryResultado0
Any
O método retorna
null1
Any
O método retorna o documento que satisfaz os critérios de consulta especificados.
2 ou mais
Varredura de collection
O método retorna o primeiro documento de acordo com a ordem natural. Em coleções limitadas, a ordem natural é a mesma que a ordem de inserção.
2 ou mais
Varredura de índice
O método retorna o primeiro documento recuperado do índice.
Importante
Se o plano de consulta for alterado para usar um índice diferente, o método poderá retornar um documento diferente. Se o seu caso de uso exigir que um registro específico seja escolhido consistentemente, você deverá usar o documento
optionspara especificar uma classificação. Para obter detalhes sobre como usarfindOne()com um documentooptions, consulte o exemplo.Se você especificar um parâmetro
projection,findOne()retornará um documento que contém apenas os camposprojection. O campo_idestá sempre incluído, a menos que seja explicitamente removido.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O método findOne() tem o seguinte formato:
db.collection.findOne( <query>, <projection>, <options> )
O método findOne() utiliza os seguintes parâmetros:
Parâmetro | Tipo | Descrição |
|---|---|---|
| documento | Opcional. Especifica os critérios de seleção de query usando operador de query. |
| documento | Opcional. Especifica os campos para retornar utilizando operadores de projeção . Omitir este parâmetro para retornar todos os campos no documento correspondente . Para obter detalhes, consulte Projeção. |
| documento | Opcional. Especifica opções adicionais para a query. Estas opções modificam o comportamento da query e como os resultados são retornados. Para ver as opções disponíveis, consulte FindOptions. |
Comportamento
Desconexão do cliente
Se o cliente que emitiu db.collection.findOne() se desconectar antes da conclusão da operação, o MongoDB marcará db.collection.findOne() para encerramento usando killOp.
Projeção
Importante
Consistência de linguagem
Como parte da criação da projeção find() e findAndModify() consistente com o estágio $project da aggregation:
A projeção
find()efindAndModify()pode aceitar expressões de agregação e sintaxe.O MongoDB impõe restrições adicionais em relação às projeções. Consulte Restrições de Projeção para detalhes.
O parâmetro projection determina quais campos serão retornados nos documentos correspondentes. O parâmetro projection obtém um documento do seguinte formulário:
{ field1: <value>, field2: <value> ... }
Projeção | Descrição |
|---|---|
| Especifica a inclusão de um campo. Se você especificar um número inteiro diferente de zero para o valor de projeção, a operação tratará o valor como |
| Especifica a exclusão de um campo. |
| Usa o operador de projeção de array Não disponível para visualizações. |
| Usa os operadores de projeção de array ( Não disponível para visualizações. |
| Usa a expressão do operador Não disponível para visualizações. |
| Especifica o valor do campo projetado. Com o uso de expressões de agregação e sintaxe, incluindo o uso de literais e variáveis de agregação, você pode projetar novos campos ou projetar campos existentes com novos valores.
|
Observação
Você pode especificar a projeção de duas maneiras para find() e findOne():
Configurando o parâmetro
projectionConfigurando o parâmetro
optionsparaprojection
Se você especificar ambos os parâmetros, o parâmetro projection terá precedência. Para utilizar options.projection, configure o parâmetro projection para null ou undefined.
Especificação de campo incorporada
Para campos em documentos incorporados, você pode especificar o campo usando:
notação de pontos, por exemplo
"field.nestedfield": <value>formato aninhado, por exemplo
{ field: { nestedfield: <value> } }
_id Projeção de campo
O campo _id é incluído nos documentos retornados por padrão, a menos que você especifique explicitamente _id: 0 na projeção para suprimir o campo.
Inclusão ou exclusão
Uma projection não pode conter especificações de inclusão e exclusão, com exceção do campo _id:
Em projeções que incluem explicitamente campos, o campo
_idé o único campo que você pode excluir explicitamente.Em projeções que excluem explicitamente campos, o campo
_idé o único campo que você pode incluir explicitamente; entretanto, o campo_idé incluído por padrão.
Para obter mais informações sobre "projection", consulte também:
Exemplos
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Com especificação de query vazia
A operação a seguir retorna um único documento da coleção movies no banco de dados sample_mflix :
db.movies.findOne()
Com uma especificação de query
A operação a seguir retorna o primeiro documento correspondente da coleção movies em que o campo title começa com a letra "T" ou o campo year é menor que 1950:
db.movies.findOne( { $or: [ { title: /^T/ }, { year: { $lt: 1950 } } ] } )
Com uma projeção
O parâmetro projection especifica quais campos retornar. O parâmetro contém especificações de inclusão ou exclusão, e não ambas, a menos que a exclusão seja para o campo _id.
Especifique os campos a serem retornados
A operação a seguir localiza um documento na coleção movies e retorna somente os campos title, genres e imdb:
db.movies.findOne( { }, { title: 1, genres: 1, imdb: 1 } )
Retorno de todos os campos, exceto os excluídos
A operação a seguir retorna um documento na coleção movies onde a array cast contém "Al Pacino". A projeção retorna todos os campos,exceto o _id campo, o votes campo no imdb documento incorporado e o fullplot campo:
db.movies.findOne( { cast: 'Al Pacino' }, { _id: 0, 'imdb.votes': 0, fullplot: 0 } )
Com uma opção
A operação a seguir usa a opção sort para retornar o primeiro documento correspondente da coleção movies classificada. Neste exemplo, a coleção é classificada por year em ordem crescente.
db.movies.findOne( { }, { }, { sort: { year: 1 } } )
O documento de resultados do findOne
Não é possível aplicar métodos de cursor ao resultado de findOne(), pois ele retorna apenas um documento. Você tem acesso direto ao documento:
var myDocument = db.movies.findOne(); if (myDocument) { var myTitle = myDocument.title; print(myTitle); }
Usar variáveis na opção let
Você pode especificar opções de consulta para modificar o comportamento da consulta e indicar como os resultados são retornados.
Por exemplo, para definir variáveis que você pode acessar em outro lugar no método findOne, utilize a opção let. Para filtrar os resultados utilizando uma variável, você deve acessar a variável dentro do operador $expr.
O exemplo a seguir define uma variável targetTitle em let e usa a variável para recuperar o filme intitulado "The Godfather":
db.movies.findOne( { $expr: { $eq: [ "$title", "$$targetTitle" ] } }, { _id: 0, title: 1, year: 1 }, { let : { targetTitle: "The Godfather" } } )
{ year: 1972, title: 'The Godfather' }