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.

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

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.

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