我是这样配置的:
* 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个数据。 这并不总是发生。这种现象似乎偶尔会发生。
是否存在可能发生类似现象的情况? 在数据库中执行特定操作时会发生这种情况吗?像块迁移。 我想知道可能导致上述现象的各种情况或原因
答案 0 :(得分:0)
众所周知,.count
方法是不准确的,因为它仅检查元数据,而实际上不计算文档数。最新版本的MongoDB中不推荐使用此方法。
您可以尝试一些方法:
db.A.countDocuments()
-此功能仅在最新版本中存在db.A.count({num:{$gt:0}})
-带有count
的过滤器将使其读取文档并计数db.A.find({}).itcount()
-这将从服务器获取所有文档,将它们传递给驱动程序/ shell并在客户端进行计数