Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

db.collection.findOne() (método mongosh)

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

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.

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

Observação

Você pode especificar a projeção de duas maneiras para find() e findOne():

  • Configurando o parâmetro projection

  • Configurando o parâmetro options para projection

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.

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:

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.

A operação a seguir retorna um único documento da coleção movies no banco de dados sample_mflix :

db.movies.findOne()

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

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 coleção movies e retorna somente os campos title, genres e imdb:

db.movies.findOne(
{ },
{ title: 1, genres: 1, imdb: 1 }
)

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

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

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

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" } }
)
{ year: 1972, title: 'The Godfather' }

Voltar

db.collection.findAndModify

Nesta página