MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

7 maneiras de contar documentos no MongoDB


O MongoDB oferece vários métodos para contar os documentos em uma coleção ou visualização. Há também alguns operadores de agregação que permitem contar documentos recebidos de um estágio anterior do pipeline de agregação.

Este artigo apresenta as seguintes maneiras de contar documentos no shell do mongo:
  • A count comando
  • O db.collection.count() método
  • O db.collection.countDocuments() método
  • O db.collection.estimatedDocumentCount() método
  • O cursor.count() método
  • O $count operador de pipeline de agregação
  • O $sortByCount operador de pipeline de agregação

A count Comando


A count O comando conta o número de documentos em uma coleção ou visualização.

Exemplo:
db.runCommand( { 
    count: "pets", 
    query: { type: "Dog" } 
} ) 

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

Neste exemplo, podemos ver que existem quatro cães no pets coleção.

Também podemos ver que ele retorna um documento que contém a contagem e o status do comando.

O db.collection.count() Método


O db.collection.count() retorna a contagem de documentos que corresponderiam a um find() consulta para a coleção ou exibição.

A collection parte é o nome da coleção ou visualização para executar a operação de contagem.

O db.collection.count() method é um método wrapper para o count comando.

Exemplo:
db.pets.count({
    "type": "Dog"
}) 

Resultado:
4

O db.collection.count() método não retorna um documento como o count comando faz. Ele simplesmente retorna a contagem.

O countDocuments() Método


O db.collection.countDocuments() O método retorna a contagem de documentos que correspondem à consulta de uma coleção ou exibição.

A collection parte é o nome da coleção ou visualização para executar a operação de contagem.

Exemplo:
db.pets.countDocuments({
    "type": "Dog"
}) 

Resultado:
4

Basicamente o mesmo resultado que db.collection.count() , embora seja recomendado usar countDocuments() em vez de count() se possível.

A documentação do MongoDB afirma:

Drivers MongoDB compatíveis com os recursos 4.0 descontinuam seus respectivos cursores e coleções count() APIs a favor de novas APIs para countDocuments() e estimatedDocumentCount() . Para os nomes de API específicos para um determinado driver, consulte a documentação do driver.

Além disso, quando usado sem um predicado de consulta, count() depende de metadados, o que pode resultar em uma contagem aproximada. O countDocuments() Por outro lado, não depende de metadados e retorna uma contagem precisa realizando uma agregação dos documentos.

O estimatedDocumentCount() Método


O db.collection.estimatedDocumentCount() é um wrapper para o count comando que retorna a contagem de todos os documentos em uma coleção ou exibição.

Exemplo:
db.pets.estimatedDocumentCount() 

Resultado:
7

O db.collection.estimatedDocumentCount() O método não usa um filtro de consulta. Em vez disso, ele usa metadados para retornar a contagem de documentos para toda a coleção/exibição.

O cursor.count() Método


O cursor.count() é um wrapper para o count comando que conta o número de documentos referenciados por um cursor.

Na verdade, ele não executa a consulta. Ele simplesmente conta e retorna o número de resultados que seriam retornados pela consulta.

Exemplo:
db.pets.find({"type": "Dog"}).count() 

Resultado:
4

Isso é equivalente ao db.collection.count() exemplo de método acima.

Como citado acima, os drivers do MongoDB compatíveis com os recursos 4.0 descontinuam seus respectivos cursores e coleções count() APIs a favor de novas APIs para countDocuments() e estimatedDocumentCount() .

O $count Operador de pipeline de agregação


O $count O operador de agregação passa um documento para o próximo estágio no pipeline de agregação que contém uma contagem do número de documentos inseridos no estágio atual.

Exemplo:
db.pets.aggregate([
    {
      $match: { type: "Dog" }
    },
    {
      $count: "DogCount"
    }
]) 

Resultado:
{ "DogCount" :4 }

Aqui está outro exemplo que mostra como você pode usar esse operador para contar resultados agrupados.
db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $group: { _id: "$type", count: { $sum: 1 } }
    },
     { 
      $sort : { count : -1, _id: 1 } 
    }
]) 

Resultado:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 } 

Essa consulta específica pode ser feita com menos código usando o $sortByCount operador de pipeline de agregação (abaixo).

O $sortByCount Operador de pipeline de agregação


O $sortByCount O operador de agregação agrupa os documentos recebidos com base no valor de uma expressão especificada e, em seguida, calcula a contagem de documentos em cada grupo distinto.

Veja como podemos usar $sortByCount para obter o mesmo resultado do exemplo anterior:
db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $sortByCount: "$type"
    }
]) 

Resultado:
{ "_id" :"Cachorro", "count" :3 }{ "_id" :"Gato", "count" :2 }{ "_id" :"Bat", "count" :1 } 
Cada grupo é gerado em seu próprio documento, que consiste em dois campos:
  • um _id campo contendo o valor de agrupamento distinto e
  • uma count campo contendo o número de documentos pertencentes a esse agrupamento.

Os documentos são classificados por count por ordem decrescente.