1.背景
对于数据量巨大的情况下,使用mongoTemplate.find()方法返回一个列表,如果不分页的话恐怕比较麻烦。mongoTemplate提供了另外一种方法,使用游标逐个获取数据,同时可以指定只查询指定的域,而不是全部获取回来。
2.示例代码
Long bussId= 1l;
Criteria criteria = new Criteria().where("bussId").is(bussId);
Query query = new Query(criteria);
List<String> fieldNamesToSelect = Arrays.asList("field1","field2","field3");
query.fields().exclude("_id");//查询的域需要排除_id,否则会默认查出来
for (String fieldName : fieldNamesToSelect) {
query.fields().include(fieldName);//添加需要包含的域
}
Document queryObject = query.getQueryObject();
Document fieldsObject = query.getFieldsObject();
try (MongoCursor<Document> cursor =
//指定查询集合
mongoTemplate.getCollection("coding_record")
//组装查询条件
.find(query.getQueryObject())
//组装需要查询的域
.projection(query.getFieldsObject())
//组装排序方式(非必须,可不设置)
//.sort(query.getSortObject())
//设置游标查询不超时
.noCursorTimeout(true)
//设置批量从数据库中获取的数据量
.batchSize(10000)
.cursor()
) {
Document doc;
while (cursor.hasNext()) {
doc = cursor.next();
System.out.println(doc);
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}