Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

encontrar (comando de banco de dados)

find

Executa uma query e retorna o primeiro lote de resultados e o ID do cursor, a partir do qual o cliente pode construir um cursor.

Dica

In mongosh, this command can also be run through the db.collection.find() or db.collection.findOne() helper methods.

Helper methods are convenient for mongosh users, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

Importante

This command has limited support in M0 and Flex clusters. For more information, see Unsupported Commands.

  • 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

The find command has the following syntax:

Alterado na versão 5.0.

db.runCommand(
{
find: <string>,
filter: <document>,
sort: <document>,
projection: <document>,
hint: <document or string>,
skip: <int>,
limit: <int>,
batchSize: <int>,
singleBatch: <bool>,
comment: <any>,
maxTimeMS: <int>,
readConcern: <document>,
max: <document>,
min: <document>,
returnKey: <bool>,
showRecordId: <bool>,
tailable: <bool>,
oplogReplay: <bool>,
noCursorTimeout: <bool>,
awaitData: <bool>,
allowPartialResults: <bool>,
collation: <document>,
allowDiskUse : <bool>,
let: <document>, // Added in MongoDB 5.0
querySettings: <document> // Added in MongoDB 9.0
}
)

Observação

A partir do MongoDB 4.4, o comando find ignora o sinalizador oplogReplay. Se definido, o servidor o aceita para compatibilidade para trás, mas o ignora.

O comando aceita os seguintes campos:

Campo
Tipo
Descrição

find

string

O nome da coleção ou visualizar para fazer query.

filter

documento

opcional. O predicado de query. Se não for especificado, todos os documentos na coleção corresponderão ao predicado.

documento

Opcional. A especificação de classificação para a ordenação dos resultados.

projection

documento

Opcional. A especificação de projeção para determinar quais campos incluir nos documentos devolvidos.

As operaçõesfind() em visualizações não suportam os seguintes operadores de projeção de comando find:

hint

string ou documento

opcional. Especificação do índice. Especifique o nome do índice como uma string ou o padrão da chave do índice. Se especificado, o sistema de query considerará apenas os planos usando o índice sugerido.

Com a seguinte exceção, hint é necessário se o comando incluir os campos min ou max. hint não é necessário com min ou max se o filter for uma condição de igualdade no campo _id { _id: <value> }.

skip

número inteiro positivo

Opcional. Número de documentos a ignorar. O padrão é 0.

limit

non-negative integer

Opcional. O número máximo de documentos a retornar. Se não for especificado, o padrão será sem limite. Um limite de 0 é equivalente a não definir nenhum limite.

batchSize

non-negative integer

Opcional. O número máximo de documentos que podem ser retornados em cada lote de um resultado de query. Por padrão, o comando find tem batchSize do menor dos documentos 101 ou 16 mebibytes (MiB) de documentos. Os lotes subsequentes têm um tamanho máximo de 16 MiB. Esta opção pode impor um limite menor do que 16 MiB, mas não maior. Quando definido, o batchSize é o menor de batchSize documentos ou 16 MiB de documentos.

Um batchSize de 0 significa que o cursor está estabelecido, mas nenhum documento é devolvido no primeiro lote.

Unlike the previous wire protocol version, a batchSize of 1 for the find command does not close the cursor.

Para especificar o tamanho do lote para operações subsequentes de getMore, use batchSize() no mongosh.

singleBatch

booleano

Opcional. Determina se o cursor deve ser fechado após o primeiro lote. O padrão é falso.

comment

any

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

Qualquer comentário definido em um comando find é herdado por todos os comandos getMore subsequentes executados no cursor find.

maxTimeMS

non-negative integer

Opcional.

Especifica um limite de tempo em milissegundos. Se você não especificar um valor para maxTimeMS, as operações não atingirão o tempo limite. Um valor 0 especifica explicitamente o comportamento ilimitado padrão.

O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de db.killOp(). O MongoDB só encerra uma operação em um de seus pontos de interrupção designados.

Ao especificar linearizable read concern, sempre use maxTimeMS caso a maioria dos membros de suporte de dados não esteja disponível. maxTimeMS garante que a operação não bloqueie indefinidamente e, em vez disso, retorne um erro se a preocupação de leitura não puder ser executada.

maxTimeMS() não tem relação com noCursorTimeout(). maxTimeMS() limita o tempo em processamento, enquanto noCursorTimeout() evita a expiração por tempo ocioso. O tempo ocioso de um cursor não contribui para seu tempo em processamento.

readConcern

documento

Opcional. Especifica a read concern.

A opção readConcern tem a seguinte sintaxe: readConcern: { level: <value> }

Os possíveis níveis de read concern são:

Para obter mais informações sobre os read concern, consulte Níveis de read concern.

O comando getMore utiliza o nível readConcern especificado no comando find de origem.

max

documento

Opcional. O limite superior exclusivo para um índice específico. Consulte cursor.max() para detalhes.

Para utilizar o campo max, o comando também deve utilizar hint a menos que a filter especificada seja uma condição de igualdade no campo _id { _id: <value> }.

min

documento

Opcional. O limite inferior inclusivo para um índice específico. Consulte cursor.min() para obter detalhes.

Para utilizar o campo min, o comando também deve utilizar hint a menos que a filter especificada seja uma condição de igualdade no campo _id { _id: <value> }.

returnKey

booleano

Optional. If true, returns only the index keys in the resulting documents. Defaults to false. If returnKey is true and the find command does not use an index, the returned documents are empty.

showRecordId

booleano

Opcional. Determina se o identificador de registro de cada documento deve ser retornado. Se verdadeiro, adiciona um campo $recordId aos documentos devolvidos.

tailable

booleano

Opcional. Retorna um cursor tailable para coleções limitadas.

awaitData

booleano

Optional. Use with the tailable option to block a getMore command on the cursor temporarily at the end of data rather than returning no data. After a timeout period, find returns as normal.

noCursorTimeout

booleano

Optional. Prevents the server from timing out non-session idle cursors after an inactivity period of 30 minutes. Ignored for cursors that are part of a session. For more information, see Session Idle Timeout.

booleano

opcional. Para query em relação a uma coleção fragmentada, permite que o comando (ou comandos subsequentes do getMore) retorne resultados parciais, ao invés de um erro, se um ou mais shards consultados não estiverem disponíveis.

If find (or subsequent getMore commands) returns partial results because the queried shard(s) aren't available, the find output includes a partialResultsReturned indicator field. If the queried shards are available for the initial find command, but one or more shards become unavailable for subsequent getMore commands, only the getMore commands that run while the shards aren't available include partialResultsReturned in their output.

collation

documento

Opcional.

Opcional. Especifica a agrupamento para utilizar para a operação.

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

A opção de agrupamento tem a seguinte sintaxe:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Ao especificar agrupamento, o campo locale é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.

Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão (consulte db.createCollection()), a operação usará o agrupamento especificado para a coleção.

Se nenhum agrupamento for especificado para a coleção ou para as operações, o MongoDB usa a comparação binária simples usada nas versões anteriores para comparações de strings.

Você não pode especificar vários agrupamentos para uma operação. Por exemplo, você não pode especificar agrupamentos diferentes por campo ou, se estiver realizando uma busca com uma classificação, não poderá usar um agrupamento para a busca e outro para a classificação.

booleano

Opcional.

Utilize esta opção para substituir o allowDiskUseByDefault para uma query específica. Você pode usar esta opção para:

  • Proibir o uso do disco em um sistema onde o uso do disco é permitido por padrão.

  • Permitir o uso do disco em um sistema onde o uso do disco é proibido por padrão.

A partir do MongoDB 6.0, se allowDiskUseByDefault estiver configurado como true e o servidor exigir mais de 100 megabytes de memória para um estágio de execução do pipeline, o MongoDB gravará automaticamente arquivos temporários em disco, a menos que a consulta especifique { allowDiskUse: false }.

Para detalhes, consulte allowDiskUseByDefault.

allowDiskUse has no effect if MongoDB can satisfy the specified sort using an index, or if the in-memory sort requires less than 100 megabytes of memory.

Para obter mais documentação completa sobre allowDiskUse, consulte cursor.allowDiskUse().

Para obter mais informações sobre restrições de memória para grandes ordenações na memória, consulte Uso de Ordenação e Índice.

documento

Opcional.

Especifica um documento com uma lista de variáveis. Isso permite que você melhore a legibilidade do comando separando as variáveis do texto da query.

A sintaxe do documento é:

{
<variable_name_1>: <expression_1>,
...,
<variable_name_n>: <expression_n>
}

A variável é definida para o valor retornado pela expressão e não pode ser alterada posteriormente.

Para acessar o valor de uma variável no comando, use o prefixo de dois cifrões ($$) junto com o nome da variável no formato $$<variable_name>. Por exemplo: $$targetTotal.

Para usar uma variável para filtrar os resultados, você deve acessar a variável dentro do operador $expr.

For a complete example using let and variables, see Use Variables in let.

Novidade na versão 5.0.

querySettings

documento

Opcional. Configurações de query que se aplicam apenas a esta execução do comando. O documento querySettings aceita os seguintes campos:

  • indexHints

  • queryFramework

  • reject

  • comment

  • queryKnobs

  • maxTimeMS

Para obter descrições desses campos, consulte Campos de comando.

O MongoDB não armazena essas configurações no cluster, e elas não se aplicam a outras query com a mesma forma de query. Para definir configurações de query que persistem para uma forma de query, use setQuerySettings.

O MongoDB combina as configurações que você passa no comando com quaisquer configurações de query armazenadas no cluster para a mesma forma de query. Se ambas as configurações especificarem o mesmo campo, a configuração de cluster armazenar terá precedência.

Novidades na versão 9.0.

O comando retorna um documento com informações do cursor, incluindo o ID do cursor e o primeiro lote de documentos. O exemplo a seguir mostra a saída quando executado em uma coleção fragmentada:

{
"cursor" : {
"firstBatch" : [
{
"_id" : ObjectId("5e8e2ca217b5324fa9847435"),
"zipcode" : "20001",
"x" : 1
},
{
"_id" : ObjectId("5e8e2ca517b5324fa9847436"),
"zipcode" : "30001",
"x" : 1
}
],
"partialResultsReturned" : true,
"id" : Long("668860441858272439"),
"ns" : "test.contacts"
},
"ok" : 1,
"operationTime" : Timestamp(1586380205, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1586380225, 2),
"signature" : {
"hash" : BinData(0,"aI/jWsUVUSkMw8id+A+AVVTQh9Y="),
"keyId" : Long("6813364731999420435")
}
}
}
Campo
Descrição

cursor

Contém as informações do cursor, incluindo o cursor id e o firstBatch dos documentos.

If the operation against a sharded collection returns partial results due to the unavailability of the queried shard(s), the cursor document includes a partialResultsReturned field. To return partial results, rather than error, due to the unavailability of the queried shard(s), the find command must run with allowPartialResults set to true. See allowPartialResults.

If the queried shards are initially available for the find command but one or more shards become unavailable in subsequent getMore commands, only the getMore commands run when a queried shard or shards are unavailable include the partialResultsReturned flag in the output.

"ok"

Indica se o comando foi bem-sucedido (1) ou falhou (0).

In addition to the preceding find-specific fields, db.runCommand() includes the following information for replica sets and sharded clusters:

  • $clusterTime

  • operationTime

Consulte resultados de db.runCommand() para obter detalhes.

Se você não precisar de uma resposta de comando bruto, use os métodos de assistente db.collection.find() ou db.collection.findOne().

Uma operação find() geralmente usa a seguinte ordem de operações:

  • corresponder

  • sort

  • ignorar

  • limit

  • projeto, projeto

O MongoDB pode executar componentes em uma ordem diferente para otimizar o desempenho da query e, ao mesmo tempo, manter a ordem de operações acima.

A partir do MongoDB 5.1, as opções de$regex options inválidas não são mais ignoradas. Essa alteração torna mais consistente com o uso $regex options de $regex nas queries aggregate de comando e projeção.

Para cursores criados dentro de uma sessão, você não pode chamar getMore fora da sessão.

Da mesma forma, para cursores criados fora de uma sessão, você não pode chamar getMore dentro de uma sessão.

MongoDB drivers and mongosh associate all operations with a server session, with the exception of unacknowledged write operations. For operations not explicitly associated with a session (i.e. using Mongo.startSession()), MongoDB drivers and mongosh create an implicit session and associate it with the operation.

Se uma sessão estiver ociosa por mais de 30 minutos, o servidor MongoDB marcará essa sessão como expirada e poderá fechá-la a qualquer momento. Quando o servidor MongoDB fecha a sessão, ele também elimina todas as operações em andamento e abre os cursores associados à sessão. Isso inclui cursores configurados com noCursorTimeout() ou maxTimeMS() com mais de 30 minutos.

Se o cursor puder ficar ocioso por mais de 30 minutos, emita a operação em uma sessão explícita usando Mongo.startSession(). Atualize periodicamente a sessão usando o comando refreshSessions. Consulte Tempo limite de inatividade da sessão para obter mais informações.

find can be used inside distributed transactions.

  • Para cursores criados fora de uma transação, você não pode chamar getMore dentro da transação.

  • Para cursores criados em uma transação, não é possível chamar getMore fora da transação.

Importante

Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.

Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.

If the client that issued find disconnects before the operation completes, MongoDB marks find for termination using killOp.

Ao usar a Stable API V1, todos os campos de comando find têm suporte, exceto os seguintes campos, que não estão disponíveis na Stable API V1:

  • awaitData

  • max

  • min

  • noCursorTimeout

  • returnKey

  • showRecordId

  • tailable

Iniciando no MongoDB 6.0, um filtro de índice utiliza a coleção definida anteriormente utilizando o comando planCacheSetFilter.

A partir do MongoDB 8.0, use configurações de query em vez de adicionar filtros de índice. Os filtros de índice estão obsoletos a partir do MongoDB 8.0.

As configurações de query têm mais funcionalidades do que os filtros de índice. Além disso, os filtros de índice não são persistentes e você não pode criar facilmente filtros de índice para todos os nós de cluster. Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings.

Starting in MongoDB 7.3, when you use a find command on a view with the singleBatch: true and batchSize: 1 options, a cursor is no longer returned. In previous versions of MongoDB these find queries would return a cursor even when you set the single batch option to true.

Novidades na versão 8.0.

Você pode usar as configurações de query para definir dicas de índice, definir filtros de descarte de operação e outros campos. As configurações se aplicam à forma de query em todo o cluster. O cluster mantém as configurações após o fechamento.

O otimizador de query usa as configurações da query como uma entrada adicional durante o planejamento da query, o que afeta o plano selecionado para executar a query. Você também pode usar as configurações de query para bloquear uma forma de query.

Para adicionar configurações de query e explorar exemplos, consulte setQuerySettings.

You can add query settings for find, distinct, and aggregate commands.

As configurações de consulta têm mais funcionalidade e são preferidas em relação aos filtros de índice obsoletos.

Para remover as configurações de query, use removeQuerySettings. Para obter as configurações de consulta, use um estágio $querySettings em um pipeline de agregação .

Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

O comando a seguir query a coleção movies para filmes com uma classificação IMDB de pelo menos 9 que estão no gênero Drama. O comando inclui um projection para retornar apenas os campos title, imdb.rating e year.

O comando classifica os resultados por title e limita a saída a 5 documentos.

db.runCommand(
{
find: "movies",
filter: { "imdb.rating": { $gte: 9 }, genres: "Drama" },
projection: { title: 1, "imdb.rating": 1, year: 1 },
sort: { title: 1 },
limit: 5
}
)

Para substituir o nível de preocupação de leitura padrão do "local", utilize a opção readConcern.

O exemplo de código a seguir executa essas operações na coleção movies em um conjunto de réplicas:

  • encontra filmes com uma classificação do IMDB abaixo de 5

  • limita os resultados a 5 documentos

  • especifica um preocupação de leitura de "majority" para ler a cópia mais recente dos dados que o MongoDB gravou para a maioria dos nós.

db.runCommand(
{
find: "movies",
filter: { "imdb.rating": { $lt: 5 } },
limit: 5,
readConcern: { level: "majority" }
}
)

Independentemente do nível de read concern, os dados mais recentes em um nó podem não refletir a versão mais recente dos dados no sistema.

The getMore command uses the readConcern level specified in the originating find command.

A readConcern can be specified for the mongosh method db.collection.find() using the cursor.readConcern() method:

db.movies.find( { "imdb.rating": { $lt: 2 } } ).readConcern("majority")

Para obter mais informações sobre as preocupações de leitura disponíveis, consulte Preocupação de leitura.

A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento.

Este exemplo executa as seguintes operações:

  • encontra filmes com o título Les Misérables e a data de 2012

  • classifica os documentos correspondentes por title

  • executa find com um agrupamento francês (locale: "fr") e correspondência insensível a acentos (strength: 1):

db.runCommand(
{
find: "movies",
filter: { title: "les misérables", year: 2012 },
sort: { title: 1 },
collation: { locale: "fr", strength: 1 }
}
)

mongosh provides the cursor.collation() to specify collation for a db.collection.find() operation.

O exemplo a seguir define uma variável targetTitle e a usa para localizar filmes comparando o campo title com o valor da variável. Este exemplo encontra todos os filmes com o título "O Poderoso Chefão":

db.movies.runCommand( {
find: db.movies.getName(),
filter: { $expr: { $eq: [ "$title", "$$targetTitle" ] } },
let : { targetTitle: "The Godfather" }
} )