MongoDB com drivers
Definição
db.collection.findOne(query, projection, options)Retorna um documento que satisfaça os critérios de queryespecificados 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.If you specify a
projectionparameter,findOne()returns a document that only contains theprojectionfields. The_idfield is always included unless you explicitly exclude it.Observação
Embora semelhante ao método
find(),findOne()retorna um documento em vez de um cursor.
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
db.collection.findOne() tem o seguinte formato:
db.collection.findOne( <query>, <projection>, <options> )
db.collection.findOne() recebe 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 findOne() se desconectar antes da conclusão da operação, o MongoDB marcará 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
You can specify projection in two ways for find() and 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.
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 resultado 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" } } )