有什么区别,我基本上想找到mycollection中的所有文件。
1.00e3 + 1 == 1.00e3
vs
db.mycollection.count()
?
它们都返回相同的结果。是否有人选择db.mycollection.find().count()
与count()
?与find().count()
有一个默认限制的事实相反(如果我错了,请纠正我),你必须键入"它"为了在shell中看到更多。
答案 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()
对于分片群集可能不准确。
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()可能不准确:
答案 3 :(得分:0)
我相信您是否正在使用某种分页方法,例如:
find(query).limit().skip().count()
您将不会获得与
相同的结果count(query)
因此,在这种情况下,如果您想获得总数,我认为您可能必须同时使用两者。