Definição
findExecuta 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 thedb.collection.find()ordb.collection.findOne()helper methods.Helper methods are convenient for
mongoshusers, 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.
Compatibilidade
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
Sintaxe
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.
Campos de comando
O comando aceita os seguintes campos:
Campo | Tipo | Descrição | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | O nome da coleção ou visualizar para fazer query. | ||||||||||
| 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. | |||||||||||
| documento | Opcional. A especificação de projeção para determinar quais campos incluir nos documentos devolvidos. As operações | ||||||||||
| 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, | ||||||||||
| número inteiro positivo | Opcional. Número de documentos a ignorar. O padrão é 0. | ||||||||||
| 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. | ||||||||||
| 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 Um Unlike the previous wire protocol version, a batchSize of 1 for the Para especificar o tamanho do lote para operações subsequentes de | ||||||||||
| booleano | Opcional. Determina se o cursor deve ser fechado após o primeiro lote. O padrão é falso. | ||||||||||
| 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 | ||||||||||
| non-negative integer | Opcional. Especifica um limite de tempo em milissegundos. Se você não especificar um valor para O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de Ao especificar
| ||||||||||
| documento | Opcional. Especifica a read concern. A opção 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 | ||||||||||
| documento | Opcional. O limite superior exclusivo para um índice específico. Consulte Para utilizar o campo | ||||||||||
| documento | Opcional. O limite inferior inclusivo para um índice específico. Consulte Para utilizar o campo | ||||||||||
| booleano | Optional. If true, returns only the index keys in the resulting documents. Defaults to false. If returnKey is true and the | ||||||||||
| booleano | Opcional. Determina se o identificador de registro de cada documento deve ser retornado. Se verdadeiro, adiciona um campo $recordId aos documentos devolvidos. | ||||||||||
| booleano | Opcional. Retorna um cursor tailable para coleções limitadas. | ||||||||||
| booleano | |||||||||||
| 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 If | |||||||||||
| 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: Ao especificar agrupamento, o campo Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão (consulte 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
A partir do MongoDB 6.0, se Para detalhes, consulte
Para obter mais documentação completa sobre 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 é: 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 ( Para usar uma variável para filtrar os resultados, você deve acessar a variável dentro do operador For a complete example using Novidade na versão 5.0. | |||||||||||
| documento | Opcional. Configurações de query que se aplicam apenas a esta execução do comando. O documento
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 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. |
Saída
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 |
|---|---|
| Contém as informações do cursor, incluindo o cursor If the operation against a sharded collection returns partial results due to the unavailability of the queried shard(s), the If the queried shards are initially available for the |
| Indica se o comando foi bem-sucedido ( |
In addition to the preceding find-specific fields, db.runCommand() includes the following information for replica sets and sharded clusters:
$clusterTimeoperationTime
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().
Comportamento
Ordem de operações
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.
$regex Encontrar queries não ignora mais Regex inválido
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.
Sessões
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.
Tempo-limite de inatividade da 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.
Transações
find can be used inside distributed transactions.
Para cursores criados fora de uma transação, você não pode chamar
getMoredentro da transação.Para cursores criados em uma transação, não é possível chamar
getMorefora 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.
Desconexão do cliente
If the client that issued find disconnects before the operation completes, MongoDB marks find for termination using killOp.
Stable API
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:
awaitDatamaxminnoCursorTimeoutreturnKeyshowRecordIdtailable
Filtros e Agrupamentos de Índice
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.
Encontrar comportamento do cursor nas visualizações
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.
Configurações de query
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 .
Exemplos
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.
Especifique uma classificação e limite
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 } )
Substituir o Padrão Atenção com a Leitura
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.
Especifique o agrupamento
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érablese a data de2012classifica os documentos correspondentes por
titleexecuta
findcom 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.
Usar variáveis em let
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" } } )