MongoTemplate使用Cursor处理大数量的数据,并查询指定字段

MongoTemplate使用Cursor处理大数量的数据,并查询指定字段

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());
        }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值