首页 新闻 搜索 专区 学院

关于java 使用mongodb 的分页查询,已经按条件查询count的问题

0
悬赏园豆:100 [已解决问题] 解决于 2021-08-01 12:07

大家好,请教大家几个问题,先说我的环境srping 2.1.3 mongo 4.0.11 .在这个环境中,我是用mongodb的时候遇到以下两个 问题,实在是不晓得怎么解决了,麻烦大家集思广益,帮助一下。谢谢。
1.我在spring中使用mongodb的mongotemplate.count(query,db) 查询的时候,的时候发现,如果count查询,如果不带条件,直接返回文档数量,是非常快的,但是当带上条件后,count查询就非常慢,我确定条件都是加了索引的。查询了文档,也说mongodb的count查询是有问题的。所以请教大家一下,你们是怎么解决的。
2.在使用mongotemplate.find(query,db) 查询的时候,直接用query.skip((pageNo-1)pageSize) query.limit(pageSize) 来设置查询页数,是可以的查询很多页的,速度也很快,但是如果使用mongotemplate.aggregate()管道的方式,如果设置的Aggregation.skip((pageNo-1)pageSize) ,发现 页数越大,查询的速度也就越慢。所以想问一下,大家怎么使用Aggregation.skip的方式来进行很快的查询。

二胖手的主页 二胖手 | 初学一级 | 园豆:73
提问于:2021-07-18 02:19
< >
分享
最佳答案
0

分页查询不建议用 skip limit. 考虑用有序id或者timestamp. 例子
page1: id>0 limit 20;
page2 id>100 limit 20; //id不连续.

同时分页不建议用页码, 而是用previous(上一页), next(下一页),

上述方式来规避一些mongodb的缺陷. 比如你提到的count慢, skip慢等.

收获园豆:100
czd890 | 专家六级 |园豆:11893 | 2021-07-20 11:52

好的,谢谢您的回答。目前我也确实暂时按照您说的方式进行操作的,不过我的疑惑还是在对于大数据的条件查询获取count总数,这个事情大家是怎么做的,或者怎么规避,您可以说一下您一把这种是怎么处理的吗?

二胖手 | 园豆:73 (初学一级) | 2021-07-25 22:50

@二胖手:
第一种: 忍受mongodb的缓慢, 忍忍也就过去了。
第二种:根据实际业务来决定用什么,例如一个案例: 数据是social数据,涉及有搜索业务, 所以数据放在mongo, 然后同步到es做搜索,count业务顺带也就做了。

第三种:脱离业务和实际环境的方案(<( ̄▽ ̄)/):
mysql存要where的字段, 做count。
redis对按where做key,做计数。
不用mongodb, 换一个数据库
往mongo上堆资源, 搞分布式, 搞分片。钱花到位了,问题也就差不多了

czd890 | 园豆:11893 (专家六级) | 2021-07-26 12:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册