Diferencia entre count () y find (). Count () en MongoDB

Cuál es la diferencia entre, básicamente, quería encontrar todos los documentos en mycollection. db.mycollection.count() vs db.mycollection.find().count() ?

Ambos devuelven el mismo resultado. ¿Hay alguna razón por la cual alguien elegiría el count() frente al find().count() ? En contraste con el hecho de que find() tiene un límite predeterminado aplicado (corrígeme si estoy equivocado) al que tendrías que escribir “it” para ver más en el shell.

db.collection.count() y cursor.count() son simplemente envoltorios alrededor del count command ejecutando así db.collection.count() y cursor.count() con / sin lo mismo devolverá el mismo argumento de consulta , devolverá lo mismo el resultado. Sin embargo, el resultado del count puede ser inexacto en el clúster fragmentado .

db.collection.count() sin parámetros cuenta todos los documentos en una colección. db.collection.find() sin parámetros coincide con todos los documentos de una colección y al agregar count() cuenta, por lo que no hay diferencia.

Esto se confirma explícitamente en la documentación db.collection.count () :

Para contar el número de todos los documentos en la colección de pedidos, use la siguiente operación:

db.orders.count()

Esta operación es equivalente a lo siguiente:

db.orders.find().count()

Como se menciona en otra respuesta de sheilak, los dos son equivalentes, excepto que db.collection.count() puede ser inexacto para clústeres fragmentados.

La última documentación dice:

count () es equivalente a la construcción db.collection.find (query) .count ().

Y entonces,

Clústeres Sharded

En un clúster fragmentado, db.collection.count () puede dar como resultado un recuento incorrecto si existen documentos huérfanos o si hay una migración de fragmento en curso.

La documentación explica cómo mitigar este error (use un agregado).

La forma en que los está usando, ambos devuelven los mismos resultados, porque no está pasando un criterio de consulta al find ().

Creo que si estás usando algún tipo de paginación como:

 find(query).limit().skip().count() 

No obtendrás el mismo resultado que

 count(query) 

Entonces, en casos como este, si quiere obtener el total, creo que debería usar ambos.

db.collection.count () es equivalente a la construcción db.collection.find (query) .count ().

Ejemplos

Contar todos los documentos en una colección

 db.orders.count() 

Esta operación es equivalente a lo siguiente:

 db.orders.find().count() 

Cuente todos los documentos que coinciden con una consulta

Cuente el número de documentos en la colección de pedidos con el campo ord_dt mayor que Nueva Fecha (’01 / 01/2012 ‘):

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

La consulta es equivalente a lo siguiente:

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

De acuerdo con la documentación en la siguiente situación, db.collection.count () puede ser inexacta:

  1. En un clúster fragmentado, db.collection.count () sin un predicado de consulta puede dar como resultado un recuento incorrecto si existen documentos huérfanos o si hay una migración de fragmento en progreso.
  2. Después de un cierre sucio de un mongod que utiliza el motor de almacenamiento Wired Tiger, las estadísticas de recuento contadas por count () pueden ser inexactas.