在MongoDB中计数不正确

Gen*_*ena 11 c# linq mongodb mongodb-.net-driver

技术:

  • MongoDB 3.0.8(MMAPv1),通过mLab托管在AWS上的非分片专用集群(主要,辅助和仲裁),3.7GB RAM
  • MongoDB 2.3的C#驱动程序
  • 连接字符串:

mongodb的:// USER:PASS@MYMONGO1.com:1234,MYMONGO2.com:1234/DB_NAME replicaSet = REPLICA_SET_NAME

假设

  • 我有一个名为Package的字段集合产品.
  • 有索引:"套餐":1
  • 永远不会删除此集合中的对象.
  • 字段包永远不会更新.
  • 不时插入新对象.

每天一次我记录这个集合的特定计数(每次都有相同的参数):

db.Products({"Package": "Box"}).count()
// actual code running in C#:
productsCollection.Find(p => p.Package == "Box").Count()
Run Code Online (Sandbox Code Playgroud)

我希望每天的结果都相同或更高. 但有时我会得到一个较小的价值.第二天它又变得正确了.它在两种不同的环境中重现.

例:

  • 第1天:4,563,135
  • 第2天:4,563,135
  • 第3天:4,563,124(比预期的少11个)
  • 第4天:4,563,135

我试图通过C#和Mongo直接手动重现它,但是失败了(值总是正确的).

这是怎么回事?

Bor*_*ris 2

这可能是由于执行代码时发生了平衡轮次。来自 MongoDB 文档:

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

更多相关信息请参见:MongoDB 文档

为了获得准确的结果,应该使用聚合框架查询