mongodb - 查询不匹配的结果在 MongoDB Shard 环境中,
问题描述
我是这样配置的:
* 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 个数据。这并不总是发生。这种现象似乎偶尔会发生。
有没有可能发生类似现象的情况?在数据库中执行特定操作时会发生这种情况吗?像块迁移..我想知道可能导致上述现象的各种情况或原因
解决方案
众所周知,这种.count
方法是不准确的,因为它只检查元数据而实际上并不计算文档。此方法在最新版本的 MongoDB 中已弃用。
您可以尝试一些方法:
db.A.countDocuments()
- 此功能仅存在于最新版本中db.A.count({num:{$gt:0}})
- 过滤器count
会导致它读取文档并计算它们db.A.find({}).itcount()
- 这将从服务器获取所有文档,将它们传递给驱动程序/外壳并在客户端计算它们
推荐阅读
- java - 有谁知道是否可以更改下载请求通知的内容标题?如何?
- typescript - vuejs + typescript项目中导入interactjs会产生类型检查错误
- angular - Angular uri路由的Nginx后备
- javascript - 方括号如何在下面的“FizzBuzz”代码中求值?
- python-3.x - 如何从同一个 python 脚本/notebook 并行运行多个 AUTOML 框架?
- c# - 如何更改播放器位置 ontriggerenter unity 2d c#
- groovy - 如何在groovy中组合多个json数组
- spring-boot - 无法在 Spring Boot 中测试 SessionRegistry
- javascript - 为什么JS在按位计算之前要进行32位转换?
- database - 如何在firebase颤动中显示razorpay结帐金额?