MongoDB db.collection.count()vs db.collection.find()。length()

时间:2016-03-17 18:14:01

标签: mongodb

我想了解为什么这些命令在针对同一个MongoDB集合的mongos实例运行时会返回不同的数字?

  • db.users.count()
  • db.users.find().length()

可能是什么原因,它可能是潜在问题的标志?

1 个答案:

答案 0 :(得分:1)

我相信你的收藏品是分片的。

大多数分片数据库解决方案都存在这样的差异,因为某些命令会考虑整个集合,这意味着所有分片的所有文档,而其他一些命令只考虑它所连接的分片的文档。

这是要始终牢记的事情。它主要适用于以下命令:

  • 计数
  • 返回给定字段的最低值的文档
  • 返回给定字段具有最大值的文档
  • ...

在Mongo docs上找到:

  

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

     

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

因此,对于Mongo来说,仅仅是因为Mongo总是在后台进程中运行一些分片内文档的重新平衡,以保持分片分发符合集合中定义的分片策略。 / p>

请记住,为了提供最佳性能,大多数分片解决方案会将文档写在客户端所连接的分片上,然后将其放在真正意义上的位置。

这就是为什么nosql数据库经常被标记为最终一致