cursor.count()
Nesta página
Definição
cursor.count()
Importante
Método mongosh
Esta página documenta um método
mongosh
. Esta não é a documentação de um driver de idioma específico, como Node.js.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
Observação
Os drivers do MongoDB compatíveis com os recursos do 4,0 depreciam seu respectivo cursor e coletam APIs do
count()
em favor de novas APIs que correspondem aocountDocuments()
eestimatedDocumentCount()
. Para obter os nomes de API específicos de um determinado driver, consulte a documentação da API do driver.Conta o número de documentos referenciados por um cursor. Anexe o método
count()
a uma queryfind()
para retornar o número de documentos correspondentes. A operação não executa a query, mas conta os resultados que seriam retornados pela query.O método
count()
tem a seguinte forma de protótipo:db.collection.find(<query>).count() O método
count()
tem o seguinte parâmetro:ParâmetroTipoDescriçãoapplySkipLimit
booleanoOpcional.
mongosh
ignora qualquer valor que você defina para esta opção. O valor padrão étrue
.A opção especifica se deve considerar os efeitos dos métodos
cursor.skip()
ecursor.limit()
na contagem. Por padrão, o métodocount()
ignora os efeitos docursor.skip()
ecursor.limit()
. Você deve definirapplySkipLimit
comotrue
para considerar o efeito desses métodos.O shell
mongo
legado , que agora está obsoleto, usou sua configuração para esta opção.O MongoDB também fornece um
db.collection.count()
equivalente como uma alternativa à construçãodb.collection.find(<query>).count()
.O MongoDB oferece suporte ao uso de
hint()
comcount()
. Consulte Especificar o índice a ser usado para obter um exemplo.
Comportamento
Contagens Imprecisas Sem Predicado de Consulta
Quando você chama count()
em uma operação find()
que não especifica um predicado de query, o método count()
pode retornar contagens de documentos imprecisas. Esses métodos de 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
Você não pode usar count
, assistentes de shell count()
e db.collection.count()
em transações.
Para obter detalhes, consulte Operações de transações e contagem.
Clusters fragmentados
Em um cluster fragmentado, count()
sem um predicado de query no find
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.
Uso do índice
Considere uma coleção com o seguinte índice:
{ a: 1, b: 1 }
Ao realizar uma contagem, o MongoDB pode retornar a contagem usando somente o índice se:
a consulta puder usar um índice,
a consulta contém apenas condições nas chaves do índicee
os predicados da consulta acessarem uma única faixa contígua de chaves de índice.
Por exemplo, as operações a seguir podem retornar a contagem usando apenas o índice:
db.collection.find( { a: 5, b: 5 } ).count() db.collection.find( { a: { $gt: 5 } } ).count() db.collection.find( { a: 5, b: { $gt: 10 } } ).count()
No entanto, se a consulta puder usar um índice, mas os predicados da consulta não acessarem uma única faixa contígua de chaves de índice ou a consulta também contiver condições em campos fora do índice, além de usar o índice, o MongoDB também deverá ler os documentos para retornar a contagem.
db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count() db.collection.find( { a: { $gt: 5 }, b: 5 } ).count() db.collection.find( { a: 5, b: 5, c: 5 } ).count()
Nesses casos, durante a leitura inicial dos documentos, o MongoDB pagina os documentos na memória de modo que as chamadas subsequentes da mesma operação de contagem terão melhor desempenho.
Exemplos
Os exemplos a seguir são do método count()
.
Contagem de todos os documentos
A seguinte operação conta o número de todos os documentos na collection orders
:
db.orders.find().count()
Contagem de documentos que correspondem a uma query
A seguinte operação conta o número de documentos na coleção orders
com o campo ord_dt
maior que new
Date('01/01/2012')
:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()
Limitar documentos na contagem
A operação a seguir conta o número de documentos na coleção orders
com o campo ord_dt
maior que new
Date('01/01/2012')
, levando em conta o efeito do limit(5)
:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)
Especificar o índice a ser usado
A seguinte operação utiliza o índice denominado "status_1"
, que tem a especificação da chave de índice de { status: 1 }
, para retornar uma contagem dos documentos na coleção orders
com o campo ord_dt
maior que new Date('01/01/2012')
e o campo status
é igual a "D"
:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') }, status: "D" } ).hint( "status_1" ).count()