Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.collection.findOne()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplos

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:

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
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 correspondentes
Plano de query
Resultado

0

Any

O método retorna null

1

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 options para especificar uma classificação. Para obter detalhes sobre como usar findOne() com um documento options , consulte o exemplo.

Se você especificar um parâmetro projection, findOne() retornará um documento que contém apenas os campos projection. O campo _id está sempre incluído, a menos que seja explicitamente removido.

Observação

Embora semelhante ao método find(), o método findOne() retorna um documento em vez de um cursor.

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

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

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.

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.

Importante

Consistência de linguagem

Como parte da criação da projeção find() e findAndModify() consistente com o estágio $project da aggregation:

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 $ para retornar o primeiro elemento que corresponde à condição de consulta no campo de array. Se você especificar um número inteiro diferente de zero para o valor de projeção, a operação tratará o valor como true.

Não disponível para visualizações.

<field>: <array projection>

Usa os operadores de projeção de array ($elemMatch, $slice) para especificar os elementos da array a serem incluídos.

Não disponível para visualizações.

<field>: <$meta expression>

Usa a expressão do operador $meta para especificar a inclusão de per-document metadatadisponíveis .

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.

  • Se você especificar um literal não numérico e não booleano (como uma string literal ou uma array ou uma expressão de operador) para o valor de projeção, o campo será projetado com o novo valor, por exemplo:

    • { field: [ 1, 2, 3, "$someExistingField" ] }

    • { field: "New String Value" }

    • { field: { status: "Active", total: { $sum: "$existingArray" } } }

  • Para projetar um valor literal para um campo, utilize a expressão de agregação $literal; por exemplo:

    • { field: { $literal: 5 } }

    • { field: { $literal: true } }

    • { field: { $literal: { fieldWithValue0: 0, fieldWithValue1: 1 } } }

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> } }

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.

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:

A operação a seguir retorna um único documento da coleção bios:

db.bios.findOne()

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') } }
]
}
)

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.

A operação a seguir localiza um documento na coleta de biografias e retorna somente os campos name, contribs e _id:

db.bios.findOne(
{ },
{ name: 1, contribs: 1 }
)

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 campo birth:

db.bios.findOne(
{ contribs: 'OOP' },
{ _id: 0, 'name.first': 0, birth: 0 }
)

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 } }
)

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));
}

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.

Voltar

db.collection.findAndModify