Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

find

Nesta página

  • Definição
  • 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 de auxiliar db.collection.find() ou db.collection.findOne() .

Os métodos auxiliares são convenientes 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 conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

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 exibições não são compatíveis com os seguintes operadores de query e 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.

A partir do MongoDB 4.2, com a seguinte exceção, hint é necessário 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
Inteiro não negativo
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
número inteiro não negativo

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 fio, um tamanho de lote de 1 para o comando find não fecha o cursor.

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

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

Observação

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

maxTimeMS
número inteiro não negativo

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.

Dica

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, garante que a operação retorne um erro se a read concern não puder ser executada.

readConcern
documento

Opcional. Especifica a read concern.

A partir do MongoDB 3.6, 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.

Iniciando no MongoDB 4.2, para utilizar o campo max , o comando também deve utilizar hint a menos que o filter especificado 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.

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

returnKey
boleano
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
boleano
Opcional. Determina se o identificador de registro de cada documento deve ser retornado. Se verdadeiro, adiciona um campo $recordId aos documentos devolvidos.
tailable
boleano
Opcional. Retorna um cursor tailable para coleções limitadas.
awaitData
boleano
Opcional. Use em conjunto com a opção tailable para bloquear temporariamente um comando getMore no cursor se estiver 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
boleano
Opcional. Impede que o servidor atinja o tempo limite de cursores ociosos sem 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 Tempo limite de inatividade da sessão.
boleano

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 os shards da query não estão disponíveis, o resultado da busca incluirá um campo indicador partialResultsReturned . Se os shard da query estiverem disponíveis para o comando find inicial, mas um ou mais shards ficarem indisponíveis para comandos getMore subsequentes, somente os comandos getMore executados enquanto os shards 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 collection 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.

boleano

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 true o estiver configurado para 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 usando 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.

Observação

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

Para obter um exemplo completo usando let e variáveis, consulte Usar variáveis em 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) analisado(s), o documento cursor incluirá um campo partialResultsReturned . Para retornar resultados parciais, ao invés de erro, devido à indisponibilidade dos fragmentos analisados, 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 de saída.

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

Além dos campos específicos do findmencionados acima, o db.runCommand() inclui as seguintes informações para conjuntos de réplicas e clusters fragmentados:

  • $clusterTime

  • operationTime

Consulte db.runCommand() Results 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.

Novidades na versão 4.0.

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 e mongosh do MongoDB associam todas as operações a uma sessão de servidor, com exceção de operações de gravação não reconhecidas. Para operações não explicitamente associadas a uma sessão (ou seja, uso Mongo.startSession()), os drivers do 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, os seguintes campos de comando find não são aceitos:

  • 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 a filtragem de comando find no campo rating e no campo cuisine . O comando inclui um projection para retornar somente os seguintes campos nos documentos correspondentes: _id, name, rating e address campos.

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 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 o 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" }
} )
← excluir