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: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Esse comando tem suporte limitado nos clusters M0 e Flex. Para saber mais, 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
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 } )
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 Ao contrário da versão anterior do protocolo de conexão , um tamanho de lote de 1 para o | ||||||||||
| 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. Default value is 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 | Opcional. Impede que o servidor atinja o tempo limite de cursores ociosos que não sejam da sessão após um período de inatividade de 30 minutos. Ignorado para cursores que fazem parte de uma sessão. Para obter mais informações, consulte a página Tempo limite de inatividade da sessão. | ||||||||||
booleano | Opcional. Para queries 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. |
Saída
O comando retorna um documento que contém as informações do cursor, incluindo o ID do cursor e o primeiro lote de documentos. Por exemplo, o comando retorna o seguinte documento 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 aforementioned find-specific fields, the 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
A seção seguinte descreve considerações comportamentais do comando find().
Ordem de operações
O MongoDB geralmente produz a saída de uma operação find() com 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 consulta 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.
Para operações que retornam um cursor, se o cursor puder ficar ocioso por mais de 30 minutos, emita a operação em uma sessão explícita usando Mongo.startSession() e 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 utilizar a API estável 1V, os seguintes campos de comando find do não são suportados:
awaitDatamaxminnoCursorTimeoutoplogReplayreturnKeyshowRecordIdtailable
Filtros e Agrupamentos de Índice
Iniciando no MongoDB 6.0, um filtro de índice utiliza a coleção definida anteriormente utilizando o comando planCacheSetFilter.
Exemplos
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.
Especifique uma classificação e limite
O comando a seguir usa find na coleção movies para encontrar filmes com uma classificação no IMDB de 9 ou superior que estão no gênero seriado. O comando inclui um projection para retornar somente os campos title, imdb.rating e year nos documentos correspondentes.
O comando classifica os documentos no resultado definido pelo campo title e limita o resultado definido para documentos 5.
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.
Este exemplo de código executa as seguintes 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" } } )