在MongoDB中计算不正确的数量

11

技术:

  • MongoDB 3.0.8 (MMAPv1),未分片,托管在AWS上的专用集群通过mLab(主、备、仲裁者),3.7GB RAM
  • MongoDB C#驱动程序版本为2.3
  • 连接字符串:

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

假设

  • 我有一个名为Products的集合,其中有一个字段叫做Package。
  • 存在索引:“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手动复现它,但失败了(值始终是正确的)。

到底发生了什么?


这个集合有哪些索引?是一个分片环境吗,还是一个副本集? - sergiuz
未分片(帖子的第一行)。 "Package"有索引:1(将更新问题以包括它) - Gena
1个回答

2
这可能是因为在执行代码时正在进行平衡轮。 根据MongoDB文档:
“在分片集群上,如果存在孤立的文档或正在进行块迁移,则db.collection.count()可能导致不准确的计数。”
更多信息请参见:MongoDB文档 要获得精确的结果,应使用聚合框架查询。

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Gena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接