sql >> Base de Datos >  >> NoSQL >> MongoDB

7 formas de contar documentos en MongoDB

MongoDB ofrece varios métodos para contar los documentos en una colección o vista. También hay algunos operadores de agregación que le permiten contar los documentos entrantes de una etapa anterior de canalización de agregación.

Este artículo presenta las siguientes formas de contar documentos en el shell mongo:

  • El count comando
  • El db.collection.count() método
  • El db.collection.countDocuments() método
  • El db.collection.estimatedDocumentCount() método
  • El cursor.count() método
  • El $count operador de tubería de agregación
  • El $sortByCount operador de tubería de agregación

El count Comando

El count El comando cuenta el número de documentos en una colección o una vista.

Ejemplo:

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

Resultado:

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

En este ejemplo, podemos ver que hay cuatro perros en las pets colección.

También podemos ver que devuelve un documento que contiene el recuento y el estado del comando.

El db.collection.count() Método

El db.collection.count() El método devuelve el recuento de documentos que coincidirían con un find() consulta de la colección o vista.

La collection part es el nombre de la colección o vista para realizar la operación de conteo.

El db.collection.count() method es un método contenedor para el count comando.

Ejemplo:

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

Resultado:

4

El db.collection.count() el método no devuelve un documento como el count el comando lo hace. Simplemente devuelve el conteo.

El countDocuments() Método

db.collection.countDocuments() El método devuelve el recuento de documentos que coinciden con la consulta de una colección o vista.

La collection part es el nombre de la colección o vista para realizar la operación de conteo.

Ejemplo:

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

Resultado:

4

Básicamente el mismo resultado que db.collection.count() , aunque se recomienda usar countDocuments() en lugar de count() si es posible.

La documentación de MongoDB dice:

Los controladores MongoDB compatibles con las funciones 4.0 desaprueban sus respectivos cursores y colecciones count() API a favor de nuevas API para countDocuments() y estimatedDocumentCount() . Para conocer los nombres de API específicos para un controlador determinado, consulte la documentación del controlador.

Además, cuando se usa sin un predicado de consulta, count() se basa en metadatos, lo que puede dar como resultado un recuento aproximado. El countDocuments() Por otro lado, el método no se basa en metadatos y devuelve un recuento preciso al realizar una agregación de los documentos.

El estimatedDocumentCount() Método

db.collection.estimatedDocumentCount() El método es un envoltorio para el count comando que devuelve el recuento de todos los documentos en una colección o vista.

Ejemplo:

db.pets.estimatedDocumentCount()

Resultado:

7

db.collection.estimatedDocumentCount() El método no acepta un filtro de consulta. En su lugar, utiliza metadatos para devolver el recuento de documentos de toda la colección/vista.

El cursor.count() Método

El cursor.count() El método es un envoltorio para el count comando que cuenta el número de documentos referenciados por un cursor..

En realidad, no realiza la consulta. Simplemente cuenta y devuelve el número de resultados que devolvería la consulta.

Ejemplo:

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

Resultado:

4

Esto es equivalente a db.collection.count() ejemplo de método anterior.

Como se mencionó anteriormente, los controladores MongoDB compatibles con las funciones 4.0 desaprueban sus respectivos cursores y colecciones count() API a favor de nuevas API para countDocuments() y estimatedDocumentCount() .

El $count Operador de tubería de agregación

El $count el operador de agregación pasa un documento a la siguiente etapa en la canalización de agregación que contiene un recuento del número de documentos ingresados ​​a la etapa actual.

Ejemplo:

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

Resultado:

{ "DogCount" : 4 }

Aquí hay otro ejemplo que muestra cómo puede usar este 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 }

Esta consulta en particular se puede hacer con menos código usando $sortByCount operador de canalización de agregación (abajo).

El $sortByCount Operador de tubería de agregación

El $sortByCount El operador de agregación agrupa los documentos entrantes según el valor de una expresión específica, luego calcula el recuento de documentos en cada grupo distinto.

Así es como podemos usar $sortByCount para lograr el mismo resultado que el ejemplo anterior:

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $sortByCount: "$type"
    }
])

Resultado:

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

Cada grupo se genera en su propio documento, que consta de dos campos:

  • un _id campo que contiene el valor de agrupación diferenciado, y
  • un count campo que contiene el número de documentos pertenecientes a esa agrupación.

Los documentos están ordenados por count en orden descendente.