MongoDB中count()和find()。count()之间的区别

时间:2015-09-19 09:04:15

标签: mongodb mongodb-query

有什么区别,我基本上想找到mycollection中的所有文件。 1.00e3 + 1 == 1.00e3 vs db.mycollection.count()

它们都返回相同的结果。是否有人选择db.mycollection.find().count()count()?与find().count()有一个默认限制的事实相反(如果我错了,请纠正我),你必须键入"它"为了在shell中看到更多。

4 个答案:

答案 0 :(得分:37)

db.collection.count()cursor.count()只是count命令的包装器,因此运行db.collection.count()cursor.count()有/无相同的将返回相同的 query 参数,将返回相同的结果。但是,count结果可以是inaccurate in sharded cluster

  

与4.0功能兼容的MongoDB驱动程序弃用了它们   相应的游标和集合count()API支持新的API   countDocuments()和estimatedDocumentCount()。对于特定的API   给定驱动程序的名称,请参阅驱动程序文档。

db.collection.countDocuments方法在内部使用aggregation query返回文档计数,而db.collection.estimatedDocumentCount/则根据元数据返回文档计数。

值得一提的是,如documentation中所述,estimatedDocumentCount输出可能不准确。

答案 1 :(得分:4)

正如sheilak的另一个回答中提到的,两者是等价的 - 除了db.collection.count()对于分片群集可能不准确。

latest documentation说:

  

count()等同于db.collection.find(query).count()   构造

然后,

  

Sharded Clusters

     

在分片群集上,db.collection.count()可以生成   如果存在孤立文档或块迁移,则计数不准确   正在进行中。

该文档说明了如何缓解此问题bug(使用聚合)。

答案 2 :(得分:1)

db.collection.count()等同于db.collection.find(query).count()构造。

示例

计算集合中的所有文档

Physics2D.Raycast

此操作等效于以下内容:

db.orders.count()

计算与查询匹配的所有文档

计算订单集合中ord_dt字段大于新日期('01 / 01/2012')的文档数:

db.orders.find().count()

查询等同于以下内容:

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

根据以下情况下的文档db.collection.count()可能不准确:

  1. 在分片群集上,如果存在孤立文档或正在进行块迁移,则没有查询谓词的db.collection.count()可能导致计数不正确。
  2. 使用Wired Tiger存储引擎对mongod进行不干净的关闭之后,count()报告的计数统计信息可能不准确。

答案 3 :(得分:0)

我相信您是否正在使用某种分页方法,例如:

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

您将不会获得与

相同的结果
count(query)

因此,在这种情况下,如果您想获得总数,我认为您可能必须同时使用两者。