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

db.collection.findOne()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplos
db.collection.findOne(query, projection, options)

Importante

Método mongosh

Esta página documenta um método mongosh . Esta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.

Para o comando do banco de dados, consulte o comando find.

Para drivers de API do MongoDB, consulte a documentação do driver MongoDB específica do idioma.

Para a documentação de shell legada do mongo, consulte a documentação para a versão correspondente do MongoDB Server:

mongo shell v4.4

Retorna um documento que satisfaça os critérios de queryespecificados na coleção ou visualização.

Se vários documentos satisfizerem a query, esse método retornará o primeiro documento de acordo com a ordem natural que reflete a ordem dos documentos no disco. Em capped collections, a ordem natural é a mesma que a ordem de inserção. Se nenhum documento satisfizer à query, o método retornará null.

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 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 formulário:

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

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

  • formulário 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 }
)

Não é possível usar métodos de cursor no 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.

← db.collection.findAndModify()