Java里操作mongoDB随机取N条数据

接了一个需求,要随机从MongoDB中选取一定数量的数据出来。
如果是sql的话,主键是自增的Int,可以先随机生成一个数,然后去找主键等于这个随机数的数据,就能实现随机查询。但是mongo中主键是自动生成的一串字符,没法根据主键查找。同时,把所有数据全部查出来,在list中再随机查找,如果数据量不大还行,数据量大这样太费时间了。
后来上网查询发现mongo中有聚合函数可以直接实现,在控制台的命令如下
随机查询10条数据

db.user.aggregate( [ { $sample: { size: 10 } } ] )

在spring则写法如下:

protected List<T> getRandom(Long size, Class<T> cls){
        Aggregation aggregation =
                Aggregation.newAggregation(
                        Aggregation.match(Criteria.where("status").is(1)),
                        Aggregation.sample(size));
        AggregationResults<T> outputTypeCount =
                mongoTemplate.aggregate(aggregation, cls, cls);
        return outputTypeCount.getMappedResults();
    }

match里写的是自己需要匹配的查询语句。
spring中如何写查询语句,怎么和控制台的语句对应起来一直是个大问题。。。自己只能慢慢摸索。还是sql写起来舒服。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值