Docs Menu
Docs Home
/ /
Cursors

cursor.count()

cursor.count()

Importante

Método mongosh

Este es un método mongosh. Esta no es la documentación de Node.js ni de otros métodos de controladores específicos de lenguajes de programación.

En la mayoría de los casos, los métodos mongosh funcionan de la misma manera que los métodos tradicionales mongo métodos shell. Sin embargo, algunos métodos heredados no están disponibles en mongosh.

Para la documentación heredada de mongo shell, revisa la documentación de la versión correspondiente de MongoDB Server:

Para los controladores de la API de MongoDB, consultar la documentación específica del controlador de MongoDB para cada lenguaje.

Nota

Los drivers de MongoDB compatibles con las funcionalidades 4.0 desaprueban sus respectivas APIs cursor y colección count() en favor de nuevas APIs correspondientes a countDocuments() y estimatedDocumentCount(). Para conocer los nombres específicos de API de un controlador determinado, consulte la documentación de la API del controlador.

Cuenta la cantidad de documentos referenciados por un cursor. Agregue el método count() find() a una query para devolver el número de documentos coincidentes. La operación no realiza la query, sino que cuenta los resultados que se devolverían por la query.

Importante

  • Evite usar count() si la operación find() se ejecuta sin un predicado de query ya que, sin el predicado de query, estos count() devuelven resultados basados en los metadatos de la colección, lo que puede resultar en un conteo aproximado. En particular,

    • En un clúster, el recuento resultante no filtrará correctamente los documentos huérfanos.

    • Después de un apagado inadecuado, la cuenta puede ser incorrecta.

  • Para los recuentos basados en los metadatos de la colección, consulta también la etapa de la pipeline de collStats con la opción count.

El método count() tiene la siguiente forma de prototipo:

db.collection.find(<query>).count()

El método count() tiene el siguiente parámetro:

Parameter
Tipo
Descripción

applySkipLimit

booleano

Opcional. Especifica si se deben considerar los efectos en el recuento de los métodos cursor.skip() y cursor.limit(). Por defecto, el método count() ignora los efectos de cursor.skip() y cursor.limit(). Configura applySkipLimit en true para considerar el efecto de estos métodos.

MongoDB también proporciona un equivalente db.collection.count() como alternativa a la construcción db.collection.find(<query>).count().

MongoDB admite el uso de hint() con count(). Consulta Especificar el índice a utilizar para ver un ejemplo.

Tip

Este método está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

No puede utilizar count ni los asistentes de shell count() y db.collection.count() en transacciones.

Para obtener más detalles, se debe consultar Transacciones y operaciones de recuento.

En un clúster particionado, count() sin un predicado de consulta en el find puede dar lugar a un recuento inexacto si existen documentos huérfanos o si una migración de fragmentos está en curso.

Para evitar estas situaciones, en un clúster fragmentado, usa el método db.collection.aggregate():

Puedes utilizar la etapa $count para contar los documentos. Por ejemplo, la siguiente operación cuenta los documentos en una colección:

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

La etapa $count es equivalente a la siguiente secuencia de $group + $project:

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

Tip

$collStats para devolver un conteo aproximado basado en los metadatos de la colección.

Considera una colección con el siguiente índice:

{ a: 1, b: 1 }

Al realizar un recuento, MongoDB puede devolver el recuento utilizando solo el índice si:

  • La query puede usar un índice,

  • la query solo contiene condiciones sobre las claves del índice, y

  • los predicados de query acceden a un único rango contiguo de claves de índice.

Por ejemplo, las siguientes operaciones pueden devolver el conteo usando solo el í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()

Sin embargo, si la query puede utilizar un índice pero los predicados de la query no acceden a un solo rango contiguo de claves de índice o la query también contiene condiciones en campos fuera del índice, entonces, además de utilizar el índice, MongoDB también debe leer los documentos para devolver el recuento.

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

En tales casos, durante la lectura inicial de los documentos, MongoDB carga los documentos en memoria de manera que las llamadas posteriores a la misma operación de conteo tengan un mejor rendimiento.

Los siguientes son ejemplos del método count().

La siguiente operación cuenta el número de todos los documentos en la colección orders:

db.orders.find().count()

La siguiente operación cuenta el número de documentos en la colección orders con el campo ord_dt mayor que new Date('01/01/2012'):

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

La siguiente operación cuenta el número de documentos en la colección orders con el campo ord_dt mayor que new Date('01/01/2012') teniendo en cuenta el efecto de limit(5):

db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)

La siguiente operación utiliza el índice llamado "status_1", que tiene la especificación de clave de índice { status: 1 }, para devolver un recuento de los documentos en la colección orders con el campo ord_dt mayor que new Date('01/01/2012') y el campo status igual a "D":

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

Volver

cursor.comment

En esta página