mongodbcount导致不正确的数量(mongodbcount一个坑)

0xcafedaddy 0xcafedaddy     2022-10-14     712

关键词:

https://www.cnblogs.com/Kellana/p/5844919.html

 

在mongodb 集群中,if  存在orphaned documents 和chunk migration, count查询可能会导致一个不正确的查询结果,例如我就是踩的这个坑,先不说话,看结果:

skip 只能获取到54631,而count查出来了77396条数据,这就是坑,一样的查询条件,不一样的结果,为了避免这种结果,可以使用聚合查询,

如上图所示,着里又是一个坑。

mongodb 的count详细文档见官网:https://docs.mongodb.com/manual/reference/command/count/

 

 

https://segmentfault.com/q/1010000008787002

 

 

该问题已经解决,使用的是最新驱动mongo-java-driver-3.4.0,通过下面的方法可以在分片集群模式下,准确的统计到记录数量,感谢大家的相助!

mongo shell >> db.collection.aggregate([{$match:{categories:"Bakery"},{$group:{"_id":null,"count":{$sum:1}}}}])

 public long getCount() {
                String user = "用户名";
                String database = "admin";
                String password = "密码";
                MongoCredential credential = MongoCredential.createCredential(user,database, password.toCharArray());
        
                MongoClientOptions options = MongoClientOptions.builder()
                        .connectionsPerHost(10)
                        .threadsAllowedToBlockForConnectionMultiplier(10)
                        .socketTimeout(20000)
                        .connectTimeout(15000)
                        .maxWaitTime(50000)
                        .build();
        
                MongoClient mongoClient = new MongoClient(new ServerAddress("IP地址", "端口"), Arrays.asList(credential), options);
        
                MongoDatabase mongoDatabase = mongoClient.getDatabase("数据库");
                MongoCollection<Document> collection = mongoDatabase.getCollection("数据表");
        
                final long[] count = new long[1];
                Block<Document> printBlock = new Block<Document>() {
                    @Override
                    public void apply(final Document document) {
                         count[0] = (long) document.get("count");
                    }
                };
                Bson bson = Filters.eq("categories", "Bakery");
                collection.aggregate(
                        Arrays.asList(
                                Aggregates.match(bson),
                                Aggregates.group(null, Accumulators.sum
                                        ("count", 1L))
                        )
                ).forEach(printBlock);
        
                return count[0];
}

 

 

 正确的count方式:

db.xxx.find( { timeUpdated : {\$gte: 1517414400000 , \$lt: 1517587200000 } } ).count()

db.xxx.find( { timeUpdated : {\$gte: NumberLong("1517500800000") , \$lt: NumberLong("1517587200000") } } ).count()

 参考:
https://docs.mongodb.com/manual/reference/operator/query/and/index.html
 

 

 

可变数量的不需要的空白导致列失真

】可变数量的不需要的空白导致列失真【英文标题】:Variablenumberofunwantedwhitespacesresultingintodistortedcolumn【发布时间】:2021-04-0323:05:35【问题描述】:最近,我问了以下问题-Unwantedwhitespacesresultingintodistortedcolumn,@sharathnatraj的回答... 查看详情

Interbase 错误:SQLDA 缺失或版本不正确,或者变量的数量/类型不正确

】Interbase错误:SQLDA缺失或版本不正确,或者变量的数量/类型不正确【英文标题】:InterbaseError:SQLDAmissingorincorrectversion,orincorrectnumber/typeofvariables【发布时间】:2009-11-2518:04:16【问题描述】:我在许多通过BDE连接到Interbase的TQuery... 查看详情

来自 C# 的 PROCEDURE... 的参数数量不正确

】来自C#的PROCEDURE...的参数数量不正确【英文标题】:IncorrectnumberofargumentsforPROCEDURE...fromC#【发布时间】:2021-01-1511:54:14【问题描述】:我在存储过程中使用参数时遇到问题。我相信我没有使用C#正确传递参数。我的代码大致相当... 查看详情

错误:预期的参数数量不正确 1

】错误:预期的参数数量不正确1【英文标题】:Error:incorrectnumberofargumentsexpected1【发布时间】:2018-02-2004:29:46【问题描述】:有人可以帮我理解这段代码有什么问题吗?PublicfunctionMainVar_myScreens:Screens=newScreens();This.addChild(_myScreens)... 查看详情

添加到可变数组的对象数量不正确

】添加到可变数组的对象数量不正确【英文标题】:Incorrectnumberofobjectsgettingaddedtomutablearray【发布时间】:2012-02-0106:17:29【问题描述】:我有一个带有表格视图的视图控制器,其中包含8个单元格(部分)。我创建了一个textField并... 查看详情

sqlite3.programmingerror 提供的绑定数量不正确

】sqlite3.programmingerror提供的绑定数量不正确【英文标题】:sqlite3.programmingerrorincorrectnumberofbindingssupplied【发布时间】:2015-12-0610:27:24【问题描述】:Python2.7和sqlite3我创建一个这样的表:#createtableconnector.execute(\'\'\'CREATETABLEmytable(c... 查看详情

UIRefreshControl 导致不正确的 TableView 偏移量

】UIRefreshControl导致不正确的TableView偏移量【英文标题】:UIRefreshControlresultinincorrectTableViewoffset【发布时间】:2016-07-0608:07:48【问题描述】:当performSegueWithIdentifier:从TableViewContorller(例如aTVC)到另一个(例如bTVC)时,如果我在... 查看详情

由于 malloc 大小不正确导致的不确定性故障?

】由于malloc大小不正确导致的不确定性故障?【英文标题】:nondeterministicfailuresduetoincorrectmallocsize?【发布时间】:2013-10-0312:12:51【问题描述】:我们是否有示例说明由于C中的malloc大小不正确而导致的非确定性故障?例如,在我... 查看详情

UICollectionViewCell 重用导致不正确的 UISwitch 状态

】UICollectionViewCell重用导致不正确的UISwitch状态【英文标题】:UICollectionViewCellreusecausingincorrectUISwitchstate【发布时间】:2019-01-2607:00:51【问题描述】:我无法找到解决此问题的方法。我在UICollectionViewCell中使用UISwitch,并且我正在... 查看详情

iOS interactivePopGestureRecognizer 导致视图显示不正确的导航栏

】iOSinteractivePopGestureRecognizer导致视图显示不正确的导航栏【英文标题】:iOSinteractivePopGestureRecognizercausingviewstodisplayincorrectnavigationbar【发布时间】:2014-01-1910:47:58【问题描述】:我以这种方式在viewDidAppear中启用了interactivePopGestur... 查看详情

CNN 回归导致两个不同(不正确)的预测

】CNN回归导致两个不同(不正确)的预测【英文标题】:CNNregressionresultsintwodistinct(incorrect)predictions【发布时间】:2021-03-2702:13:54【问题描述】:我正在尝试使用PythonKerasCNN(Tensorflow作为主干)解决回归问题,我尝试根据获取的8... 查看详情

sqlite 和 python 错误-提供的绑定数量不正确

】sqlite和python错误-提供的绑定数量不正确【英文标题】:Errorwithsqliteandpython-Incorrectnumberofbindingssupplied【发布时间】:2013-02-0912:36:20【问题描述】:根据我的阅读,这是一个常见错误——我正在将制表符分隔的文本文件读入sqlite... 查看详情

为啥这个 stl 函数调用会导致不正确的布尔评估? [复制]

】为啥这个stl函数调用会导致不正确的布尔评估?[复制]【英文标题】:Whydoesthisstlfunctioncallresultinanincorrectbooleanevaluation?[duplicate]为什么这个stl函数调用会导致不正确的布尔评估?[复制]【发布时间】:2018-12-3023:28:14【问题描述】... 查看详情

隐藏标签栏导致不正确的 UIView 位置

】隐藏标签栏导致不正确的UIView位置【英文标题】:HidetabbarcausingincorrectUIViewpositions【发布时间】:2016-11-2913:44:39【问题描述】:在我的视图控制器中,我有一个UIView(抽屉视图),它位于可见屏幕下方,只有顶部伸出(一个选... 查看详情

自定义事件错误“参数数量不正确。预计不超过 1。”

】自定义事件错误“参数数量不正确。预计不超过1。”【英文标题】:CustomEventError"Incorrectnumberofarguments.Expectednomorethan1."【发布时间】:2016-04-2901:21:03【问题描述】:我目前正在制作一个只传递一条数据的基本自定义事... 查看详情

过滤的唯一索引导致更新失败,因为不正确的 'QUOTED_IDENTIFIER' 设置

】过滤的唯一索引导致更新失败,因为不正确的\\\'QUOTED_IDENTIFIER\\\'设置【英文标题】:FilteredUniqueIndexcausingUPDATEtofailbecauseincorrect\'QUOTED_IDENTIFIER\'settings过滤的唯一索引导致更新失败,因为不正确的\'QUOTED_IDENTIFIER\'设置【发布时间... 查看详情

使用 insert into ... select 会导致 select 附近的语法不正确,为啥?

】使用insertinto...select会导致select附近的语法不正确,为啥?【英文标题】:Usinginsertinto...selectresultsinaincorrectsyntaxnearselect,why?使用insertinto...select会导致select附近的语法不正确,为什么?【发布时间】:2011-06-0616:12:46【问题描述】... 查看详情

Python Sqlite3 executemany 中的绑定数量不正确

】PythonSqlite3executemany中的绑定数量不正确【英文标题】:IncorrectnumberofbindingsinPythonSqlite3executemany【发布时间】:2020-06-2018:57:06【问题描述】:所以我在Python中有一个sqlite3数据库,其中有一个表,我试图向其中添加1000个字符串。... 查看详情