mongoTemplate查询大数据过慢

转载 2018年04月17日 17:36:19

先上两段代码 
代码一

Query query = new Query();
queryAfter.addCriteria(Criteria.where("id").in(idList));
queryAfter.addCriteria(Criteria.where("time").gte(startTime).lte(endTime));
List<TestEntity> lists = mongoTemplate.find(queryBefore,TestEntity.class);
  • 1
  • 2
  • 3
  • 4

代码二

DBObject query1 = new BasicDBObject(); //setup the query criteria 设置查询条件
query1.put("id", new BasicDBObject("$in", idList));
query1.put("time", (new BasicDBObject("$gte", startTime)).append("$lte", endTime));
DBCursor dbCursor =mongoTemplate.getCollection("testEntity").find(query1);
List<TestEntity> list=new ArrayList<>();
while (dbCursor.hasNext()){
    DBObject object=dbCursor.next();
    TestEntity te=new TestEntity();
    te.setId(object.get("_id").toString());
    te.setTime((Date) object.get("time"));
    list.add(te);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12


集合部分截图:


逻辑很简单,从testEntity集合中根据id列表和开始结束时间进行文档筛选,但是在大数据量下,差别太大了! 

比如testEntity集合有25万条文档,查询出4万条文档转换成TestEntity实体类集合,第一种直接转换成实体要80秒,而第二种耗时1秒不到!我一度还以为是mongo的问题,后来才定位到是代码的坑!

所以数据量大的时候还是用原生查询手动映射成实体类比较快!

MongoTemplate使用Cursor处理大数量的数据

对于数据量巨大的情况下,使用mongoTemplate.find()方法返回一个列表,如果不分页的话恐怕比较麻烦。mongoTemplate提供了另外一种方法,使用游标逐个获取数据,同时可以指定只获取...
  • ClementAD
  • ClementAD
  • 2017-02-15 16:09:28
  • 2143

MongoTemplate数组查询

/** * 按时间范围、最大最小经纬度检索(矩形查询) * * @param timeRange * 开始时间,结束时间中间逗号隔开,必...
  • jiangshuanshuan
  • jiangshuanshuan
  • 2018-02-08 20:18:31
  • 138

使用MongoTemplate管理MongoDB的一些查询操作(Java)

说明:这里主要是分两种情况 一是采用org.springframework.data.mongodb.core.aggregation.Aggregation,用于组合一个统计需要的元素+Criter...
  • LiMing_0820
  • LiMing_0820
  • 2017-11-28 17:14:30
  • 582

mongotemplate criteria查询

假设有个student类 student类中有name,age属性 mongodb criteria查询时 多条件时可以这么写 import org.springframework.data.mo...
  • manjusaskatj
  • manjusaskatj
  • 2015-02-03 14:25:53
  • 2939

spring-mongo-template中对内嵌集合对象 不定参数的查询

测试数据: { "_id" : ObjectId("54c752ed5c01557fc2eba8f1"), "title" : "测试1,27", "products" : [{ ...
  • u014016716
  • u014016716
  • 2015-01-27 20:29:39
  • 992

用MongoTemplate查询指定字段的正确奥义

这里举一个我个人犯的一个错误,希望看到此博文的人能避免犯同样的错误: 在CompanyInfo这个类中,它其中包含一个List类型的AccountInfo属性。然后好戏开始了,我希望通过BasicD...
  • zhujun_xiaoxin
  • zhujun_xiaoxin
  • 2017-01-12 15:36:29
  • 6008

mongotemplate mongodb的各种操作 模糊查询 精确查询 等等

本意是想查查mongo数据库的int类型的like怎么查,但是好像没 解决这个问题。 一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is...
  • LXB15959168136
  • LXB15959168136
  • 2016-08-19 18:38:30
  • 25351

spring data mongodb之mongodbTemplate查询总结

常用的列表查询(筛选条件,查询字段,排序及分页),相当于关系型数据库的:select fields from tableName where coditions order by field skip...
  • mazhen1991
  • mazhen1991
  • 2017-11-03 14:58:33
  • 711

Spring MongodbTemplate 查找10公里范围内的目标(以车辆为例)

Mongodb官网参考地址:https://docs.mongodb.com/manual/core/geospatial-indexes/#calculation-of-geohash-values...
  • chenli_66
  • chenli_66
  • 2016-09-27 14:33:27
  • 1356
收藏助手
不良信息举报
您举报文章:mongoTemplate查询大数据过慢
举报原因:
原因补充:

(最多只允许输入30个字)