先上两段代码
代码一

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);

代码二

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);
}
逻辑很简单,从testEntity集合中根据id列表和开始结束时间进行文档筛选,但是在大数据量下,差别太大了!
比如testEntity集合有25万条文档,查询出4万条文档转换成TestEntity实体类集合,第一种直接转换成实体要80秒,而第二种耗时1秒不到!我一度还以为是mongo的问题,后来才定位到是代码的坑!

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

相关文章:

  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
  • 2021-09-29
  • 2021-11-04
  • 2022-12-23
猜你喜欢
  • 2021-09-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-05
  • 2021-11-23
  • 2021-12-06
相关资源
相似解决方案