db.collection.findOne()
Definição
db.collection.findOne(query, projection, options)
Importante
Método mongosh
Esta página documenta um método
mongosh
. Esta não é a documentação de comandos de banco de dados nem drivers específicos de linguagem, como Node.js.Para o comando de banco de dados de dados, consulte o comando
find
.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
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 queryResultado0AnyO método retornanull
1AnyO método retorna o documento que satisfaz os critérios de consulta especificados.2 ou maisVarredura de collectionO 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 maisVarredura de índiceO 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
options
para 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_id
está sempre incluído, a menos que seja explicitamente removido.
Compatibilidade
Você pode utilizar o db.collection.findOne()
para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
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 |
---|---|---|
query | documento | Opcional. Especifica os critérios de seleção de query usando operador de query. |
projection | 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. |
options | documento | Opcional. Especifica opções adicionais para a consulta. Estas opções modificam o comportamento da consulta e como os resultados são retornados. Para ver as opções disponíveis, consulte FindOptions. |
Comportamento
Desconexão do cliente
A partir do MongoDB 4.2, 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 |
---|---|
<field>: <1 or true> | 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 true . |
<field>: <0 or false> | Especifica a exclusão de um campo. |
"<field>.$": <1 or true> | Usa o operador de projeção de array Não disponível para visualizações. |
<field>: <array projection> | Usa os operadores de projeção de array ( Não disponível para visualizações. |
<field>: <$meta expression> | Usa a expressão do operador Não disponível para visualizações. |
<field>: <aggregation expression> | 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.
|
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
Com especificação de query vazia
A operação a seguir retorna um único documento da coleção bios:
db.bios.findOne()
Com uma especificação de query
A operação a seguir retorna o primeiro documento correspondente da collection de bios em que o campo first
no documento incorporado name
começa com a letra G
ou onde o campo birth
é menor que new
Date('01/01/1945')
:
db.bios.findOne( { $or: [ { 'name.first' : /^G/ }, { birth: { $lt: new Date('01/01/1945') } } ] } )
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 collection de bios e retorna somente o campo name
, contribs
e _id
:
db.bios.findOne( { }, { name: 1, contribs: 1 } )
Retorno de todos os campos, exceto os excluídos
A operação a seguir retorna um documento na collection de bios onde o campo contribs
contém o elemento OOP
e retorna todos os campos, exceto o campo _id
, o campo first
no documento incorporado name
e o birth
campo:
db.bios.findOne( { contribs: 'OOP' }, { _id: 0, 'name.first': 0, birth: 0 } )
Com uma opção
A operação a seguir usa a opção sort
para retornar o primeiro documento correspondente da coleção bios
classificada. Neste exemplo, a coleção é classificada por birth
em ordem crescente.
db.bios.findOne( { }, { }, { sort: { birth: 1 } } )
O findOne
documento de resultados
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.bios.findOne(); if (myDocument) { var myName = myDocument.name; print (tojson(myName)); }
Usar variáveis na let
opção
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
.
Criar uma coleção cakeFlavors
:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
O exemplo a seguir define uma variável targetFlavor
em let
e usa a variável para recuperar o sabor do bolo de chocolate:
db.cakeFlavors.findOne( { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, { _id: 0 }, { let : { targetFlavor: "chocolate" } } )
Saída:
{ flavor: 'chocolate' }
Para ver todas as opções de query disponíveis, consulte FindOptions.