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

contar

Nesta página

  • Definição
  • Sintaxe
  • Suporte à API Estável
  • Comportamento
  • Exemplos
count

Conta o número de documentos em uma collection ou visualização. Retorna um documento que contém essa contagem e o status do comando.

Dica

Em mongosh, este comando também pode ser executado por meio do método auxiliar count() .

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.

Observação

Drivers do MongoDB compatíveis com os recursos do 4.0 desencorajam o uso de suas respectivas count() APIs de cursor e coleção (que executam o comando count ) em favor de novas APIs que correspondem a countDocuments() e estimatedDocumentCount(). Para obter os nomes de API específicos de um determinado driver, consulte a documentação de API do driver.

O comando tem a seguinte sintaxe:

Observação

A partir da versão 4.2, o MongoDB implementa uma validação mais rigorosa dos nomes de opção para o comando count. O comando agora emite erros se você especificar um nome de opção desconhecido.

db.runCommand(
{
count: <collection or view>,
query: <document>,
limit: <integer>,
skip: <integer>,
hint: <hint>,
readConcern: <document>,
maxTimeMS: <integer>,
collation: <document>,
comment: <any>
}
)

count tem os seguintes campos:

Campo
Tipo
Descrição
count
string
O nome da collection ou visualização para contar.
query
documento
Opcional. Uma query que seleciona quais documentos contar na collection ou visualização.
limit
inteiro
Opcional. O número máximo de documentos correspondentes a serem devolvidos.
skip
inteiro
Opcional. O número de documentos correspondentes a ignorar antes de retornar os resultados.
hint
string ou documento
Opcional. O índice a ser utilizado. Especifique o nome do índice como uma string ou o documento de especificação do índice.
readConcern
documento

Opcional. Especifica a read concern. A opção 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.

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.

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.

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

A partir do MongoDB 6.0, o comando count está incluído na API estável V1. Para usar o comando count na API estável, você deve conectar seu driver a uma implantação que esteja executando o MongoDB 6.0 ou superior.

Ao chamar count sem um predicado de query, você pode receber contagens imprecisas de documentos. Sem um predicado de query, os comandos count retornam resultados com base nos metadados da coleção, o que pode resultar em uma contagem aproximada. Em particular,

Para contagens com base nos metadados da coleção, consulte também o estágio do pipeline do CollStats com a opção de contagem.

Quando você usa count em uma transação, a contagem resultante não filtrará transações multidocumentos não confirmada.

Para obter detalhes, consulte Operações de transações e contagem.

Em um cluster fragmentado, o comando count quando executado sem um predicado de consulta pode resultar em uma contagem imprecisa se documentos órfãos existirem ou se uma migração de parte estiver em andamento.

Para evitar estas situações, em um cluster fragmentado, utilize o método db.collection.aggregate():

Você pode usar o estágio $count para contar os documentos. Por exemplo, a seguinte operação conta os documentos em uma coleção:

db.collection.aggregate( [
{ $count: "myCount" }
])

O estágio $count é equivalente à seguinte sequência $group + $project:

db.collection.aggregate( [
{ $group: { _id: null, count: { $sum: 1 } } },
{ $project: { _id: 0 } }
] )

Dica

Veja também:

$collStats para retornar uma contagem aproximada com base nos metadados da coleção.

Após um desligamento impuro de um mongod usando o mecanismo de armazenamento Wired Tiger, as estatísticas de contagem relatadas por count podem ser imprecisas.

A quantidade de desvio depende do número de operações de inserção, atualização ou exclusão executadas entre o último ponto de verificação e o desligamento não limpo. Os pontos de verificação geralmente ocorrem a cada 60 segundos. No entanto, mongod instâncias executadas com configurações de --syncdelay não padrão podem ter pontos de verificação mais ou menos frequentes.

Execute validate em cada collection no mongod para restaurar as estatísticas depois de um desligamento impróprio.

Após um desligamento impróprio:

Observação

Essa perda de precisão só se aplica a operações count que não incluem um documento de consulta.

A partir do MongoDB 4.2, se o cliente que emitiu count se desconectar antes da conclusão da operação, o MongoDB marcará count para encerramento usando killOp.

As seções seguintes fornecem exemplos do comando count.

A seguinte operação conta o número de todos os documentos na collection orders:

db.runCommand( { count: 'orders' } )

No resultado, o n, que representa a contagem, é 26, e o status de comando ok é 1:

{ "n" : 26, "ok" : 1 }

A seguinte operação retorna uma contagem dos documentos na collection orders onde o valor do campo ord_dt é maior que Date('01/01/2012'):

db.runCommand( { count:'orders',
query: { ord_dt: { $gt: new Date('01/01/2012') } }
} )

No resultado, o n, que representa a contagem, é 13 e o status de comando ok é 1:

{ "n" : 13, "ok" : 1 }

A operação a seguir retorna uma contagem dos documentos na collection orders em que o valor do campo ord_dt é maior que Date('01/01/2012') e ignora os primeiros documentos 10 correspondentes:

db.runCommand( { count:'orders',
query: { ord_dt: { $gt: new Date('01/01/2012') } },
skip: 10 } )

No resultado, o n, que representa a contagem, é 3 e o status de comando ok é 1:

{ "n" : 3, "ok" : 1 }

A operação seguinte utiliza o índice { status: 1 } para retornar uma contagem dos documentos na collection orders onde o valor do campo ord_dt é maior que Date('01/01/2012') e o campo status é igual a "D":

db.runCommand(
{
count:'orders',
query: {
ord_dt: { $gt: new Date('01/01/2012') },
status: "D"
},
hint: { status: 1 }
}
)

No resultado, o n, que representa a contagem, é 1 e o status de comando ok é 1:

{ "n" : 1, "ok" : 1 }

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 gravados na maioria dos nós.

Importante

  • Para utilizar o nível readConcern de "majority", você deve especificar uma condição query não vazia.

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

db.runCommand(
{
count: "restaurants",
query: { rating: { $gte: 4 } },
readConcern: { level: "majority" }
}
)

Para garantir que um único thread possa ler suas próprias gravações, use "majority" read concern e "majority" write concern em relação ao primário do conjunto de réplicas.

← Agregação