contar
Definição
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
No
mongosh
, este comando também pode ser executado pelo método assistente docount()
.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 comandocount
) em favor de novas APIs que correspondem acountDocuments()
eestimatedDocumentCount()
. Para obter os nomes de API específicos de um determinado driver, consulte a documentação de API do driver.
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 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> } )
Campos de comando
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:
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. | ||||||||||
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 | ||||||||||
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. | ||||||||||
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). |
Suporte à API Estável
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.
Comportamento
Contagens Imprecisas Sem Predicado de Consulta
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:
Em um cluster fragmentado, a contagem resultante não filtrará corretamente documentos órfãos.
Após um desligamento não limpo ou sincronização inicial, a contagem pode estar incorreta.
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.
Contagem e Transações
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.
Precisão e clusters fragmentados
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.
Precisão após Desligamento Inesperado
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:
validate
atualiza a estatística de contagem nacollStats
saída com o valor mais recente.Outras estatísticas, como o número de documentos inseridos ou removidos na
collStats
saída , são estimativas.
Observação
Essa perda de precisão só se aplica a operações count
que não incluem um documento de consulta.
Desconexão do cliente
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
.
Exemplos
As seções seguintes fornecem exemplos do comando count
.
Contagem de todos os documentos
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 }
Contagem de documentos que correspondem a uma query
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 }
Ignorar documentos na contagem
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 }
Especificar o índice a ser usado
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 }
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 gravados na maioria dos nós.
Importante
Para utilizar o nível
readConcern
de"majority"
, você deve especificar uma condiçãoquery
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.