在MongoDB中计数不正确

时间:2016-11-20 10:30:45

标签: c# mongodb linq 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()

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

示例:

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

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

发生了什么?

1 个答案:

答案 0 :(得分:2)

这可能是由于执行代码时正在进行平衡循环。 来自MongoDB文档:

  

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

更多相关信息:MongoDB documentation

要获得确切的结果,应使用聚合框架查询