find
Definição
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
No
mongosh
, este comando também pode ser executado através dos métodos assistentesdb.collection.find()
oudb.collection.findOne()
.Os métodos auxiliares são práticos para os usuários
mongosh
, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.
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
Este comando tem suporte limitado em clusters M0, M2 e M5 . Para obter mais informações, 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
O comando find
tem a seguinte sintaxe:
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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
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. Consulte Projeção e Operadores de Projeção. As operações | ||||||||||
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, | ||||||||||
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 de documentos a retornar no primeiro lote. O padrão é 101. Um batchSize de 0 significa que o cursor será estabelecido, mas nenhum documento será retornado no primeiro lote. Ao contrário da versão anterior do protocolo de conexão, um tamanho de lote 1 para o comando | ||||||||||
| 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 | ||||||||||
maxTimeMS | 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 | ||||||||||
readConcern | 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 | ||||||||||
max | documento | Opcional. O limite superior exclusivo para um índice específico. Consulte Para utilizar o campo | ||||||||||
min | documento | Opcional. O limite inferior inclusivo para um índice específico. Consulte Para utilizar o campo | ||||||||||
returnKey | booleano | Opcional. Se verdadeiro, retorna apenas as chaves de índice nos documentos resultantes. O valor padrão é falso. Se returnKey for verdadeiro e o comando find não utilizar um índice, os documentos retornados estarão vazios. | ||||||||||
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 | |||||||||||
noCursorTimeout | 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 Se | |||||||||||
collation | documento | Opcional. Especifica o agrupamento a ser usado 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 ordenações de bloqueio grandes, 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 Para um exemplo completo utilizando Novidades 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 seguinte documento é retornado 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" : NumberLong("668860441858272439"), "ns" : "test.contacts" }, "ok" : 1, "operationTime" : Timestamp(1586380205, 1), "$clusterTime" : { "clusterTime" : Timestamp(1586380225, 2), "signature" : { "hash" : BinData(0,"aI/jWsUVUSkMw8id+A+AVVTQh9Y="), "keyId" : NumberLong("6813364731999420435") } } }
Campo | Descrição |
---|---|
cursor | Contém as informações do cursor, incluindo o cursor Se a operação em uma coleção fragmentada retornar resultados parciais devido à indisponibilidade do(s) fragmento(s) consultado(s) na query, o documento Se os fragmentos analisados estiverem inicialmente disponíveis para o comando |
"ok" | Indica se o comando foi bem-sucedido ( 1 ) ou falhou (0 ). |
Além dos campos find
-específicos mencionados acima, o db.runCommand()
inclui as seguintes informações para conjuntos de réplicas e clusters fragmentados:
$clusterTime
operationTime
Consulte resultados de db.runCommand() para obter detalhes.
Comportamento
$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
Os drivers MongoDB e mongosh
associam todas as operações a uma sessão do servidor, com exceção das operações de gravação não reconhecidas. No caso das operações não associadas explicitamente a uma sessão (ou seja, usando Mongo.startSession()
), os drivers MongoDB e mongosh
criam uma sessão implícita e a associam à operação.
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
pode ser usado dentro de transações distribuídas.
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.
Desconexão do cliente
A partir do MongoDB 4.2, se o cliente que emitiu find
se desconectar antes da conclusão da operação, o MongoDB marcará find
para encerramento usando killOp
.
Stable API
Ao usar a Stable API V1, não há suporte para os seguintes campos de comando find
:
awaitData
max
min
noCursorTimeout
oplogReplay
returnKey
showRecordId
tailable
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
A partir do MongoDB 7.3, quando você usa um comando find em uma visualização com as opções singleBatch: true
e batchSize: 1
, um cursor não é mais retornado. Em versões anteriores do MongoDB , essas queries de localização retornariam um cursor mesmo quando você definisse a opção de lote único como 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
.
Você pode adicionar configurações de query para comandos find
, distinct
e aggregate
.
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
Especifique uma classificação e limite
O seguinte comando executa o comando find
filtrando no campo rating
e no campo cuisine
. O comando inclui uma projection
para retornar apenas os seguintes campos nos documentos correspondentes: campos _id
, name
, rating
e address
.
O comando classifica os documentos no resultado definido pelo campo name
e limita o resultado definido para documentos 5.
db.runCommand( { find: "restaurants", filter: { rating: { $gte: 9 }, cuisine: "italian" }, projection: { name: 1, rating: 1, address: 1 }, sort: { name: 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
.
A operação a seguir em um conjunto de réplicas especifica uma read concern de "majority"
para ler a cópia mais recente dos dados confirmados como tendo sido gravados na maioria dos nós.
db.runCommand( { find: "restaurants", filter: { rating: { $lt: 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.
O comando getMore
usa o nível readConcern
especificado no comando find
de origem.
Um readConcern
pode ser especificado para o método mongosh
db.collection.find()
utilizando o método cursor.readConcern()
:
db.restaurants.find( { rating: { $lt: 5 } } ).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.
A operação a seguir executa o comando find
com o agrupamento especificado:
db.runCommand( { find: "myColl", filter: { category: "cafe", status: "a" }, sort: { category: 1 }, collation: { locale: "fr", strength: 1 } } )
mongosh
fornece a cursor.collation()
para especificar o agrupamento para uma operação db.collection.find()
.
Usar variáveis em let
Novidades na versão 5.0.
Para definir variáveis que você pode acessar em outro lugar no comando, use a opção let .
Observação
Para filtrar resultados usando 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.runCommand( { find: db.cakeFlavors.getName(), filter: { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, let : { targetFlavor: "chocolate" } } )