Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

find

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplos
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 assistentes db.collection.find() ou db.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.

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

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

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 find() nas visualizações não suportam os seguintes operadores de projeção :

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 será exigido se o comando incluir os campos min e/ou max ; hint não é necessário com min e/ou max se 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 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 find não fecha o cursor.

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.

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:

  • "local". Esse é o read concern padrão para operações de leitura em relação ao primário e secundários.

  • "available". Disponível para operações de leitura em relação às primárias e secundárias. "available" se comporta da mesma forma que "local" em relação aos secundários primários e não fragmentados. A query retorna os dados mais recentes da instância.

  • "majority". Disponível para conjuntos de réplica que usam o mecanismo de armazenamento WiredTiger.

  • "linearizable". Disponível apenas para operações de leitura no primary.

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
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
Opcional. Use em conjunto com a opção tailable para bloquear temporariamente um comando getMore no cursor no final dos dados, em vez de não retornar nenhum dado. Após um período de tempo-limite, find volta ao normal.
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 getMore) retorne resultados parciais, ao invés de um erro, se um ou mais fragmentos analisados não estiverem disponíveis.

Se find (ou comandos getMore subsequentes) retornarem resultados parciais porque o(s) fragmento(s) consultado(s) na query não está/estão disponível(is), a saída encontrada incluirá um campo indicador partialResultsReturned. Se os fragmento consultados na query estiverem disponíveis para o comando find inicial, mas um ou mais fragmentos ficarem indisponíveis para comandos getMore subsequentes, somente os comandos getMore executados enquanto os fragmentos não estiverem disponíveis incluirão partialResultsReturned em seu resultado.

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:

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 não terá efeito se o MongoDB puder satisfazer a classificação especificada utilizando um índice, ou se a classificação de bloqueio exigir menos de 100 megabytes de memória.

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

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 é:

{
<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.

Para um exemplo completo utilizando let e variáveis, consulte Utilizar Variáveis no let.

Novidades na versão 5.0.

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 id e o firstBatch dos documentos.

Se a operação em uma coleção fragmentada retornar resultados parciais devido à indisponibilidade do(s) fragmento(s) consultado(s) na query, o documento cursor incluirá um campo partialResultsReturned . Para retornar resultados parciais, ao invés de erro, devido à indisponibilidade do(s) fragmento(s) consultado(s), o comando find deve ser executado com allowPartialResults configurado para true. Consulte allowPartialResults.

Se os fragmentos analisados estiverem inicialmente disponíveis para o comando find, mas um ou mais fragmentos ficarem indisponíveis nos comandos getMore subsequentes, somente os comandos getMore executados quando um ou mais fragmentos analisados estiverem indisponíveis incluirão o sinalizador partialResultsReturned na saída.

"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.

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.

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.

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.

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.

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

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

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

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.

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().

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

Voltar

excluir