【问题标题】:Count incorrect in MongoDB在 MongoDB 中计数不正确
【发布时间】:2016-11-20 10:30:45
【问题描述】:

技术:

  • 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 的字段之一的 Products。
  • 有索引:“包”: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 手动复制它,但失败了(值始终正确)。

发生了什么事?

【问题讨论】:

  • 这个集合的索引是什么?是分片环境,副本集?
  • 未分片(帖子的第一行)。 “Package”上有索引:1(将更新问题以包含它)

标签: c# mongodb linq mongodb-.net-driver


【解决方案1】:

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

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

更多信息在这里:MongoDB documentation

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

【讨论】:

  • 谢谢。据我所知,孤立文档仅存在于分片集群中。由于我的没有分片,这与我的情况无关。
猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多