查询不匹配的结果在MongoDB Shard环境中,

时间:2020-07-17 06:30:41

标签: mongodb sharding chunks mongodb-replica-set

我是这样配置的:

* configDB 1
* configDB 2
* configDB 3
* Mongos
* mongod (cluster_1)
* mongod (cluster_2)

shardkey : num (field)
shardkeyrange: 1~5 -> cluster1
shardkeyrange: 6~10 -> cluster2

我通过以下查询在db(mongos)中插入了10个数据

db.A.insert({"num":1});
db.A.insert({"num":2});
db.A.insert({"num":3});
db.A.insert({"num":4});
db.A.insert({"num":5});
db.A.insert({"num":6});
db.A.insert({"num":7});
db.A.insert({"num":8});
db.A.insert({"num":9});
db.A.insert({"num":10});

在mongod(cluster_1,cluster_2)中查找查询

db.A.find({}).count; // cluster_1
> 5
db.A.find({}).count; //cluster_2
> 3

期望值:

>5
>5

可以看出,每个分片服务器中存储了5个数据。 但是当我查询每个群集时,cluster_1有5个数据,cluster_2有3个数据。 这并不总是发生。这种现象似乎偶尔会发生。

是否存在可能发生类似现象的情况? 在数据库中执行特定操作时会发生这种情况吗?像块迁移。 我想知道可能导致上述现象的各种情况或原因

1 个答案:

答案 0 :(得分:0)

众所周知,.count方法是不准确的,因为它仅检查元数据,而实际上不计算文档数。最新版本的MongoDB中不推荐使用此方法。

您可以尝试一些方法:

  • db.A.countDocuments()-此功能仅在最新版本中存在
  • db.A.count({num:{$gt:0}})-带有count的过滤器将使其读取文档并计数
  • db.A.find({}).itcount()-这将从服务器获取所有文档,将它们传递给驱动程序/ shell并在客户端进行计数
相关问题