0%

MongoDB 随机查询一条数据

随机查询,最简单的方法是,计算文档总数,再生成一个范围在0到文件总数的随机数,然后使用skip,limit把它找出来,但是,前面说过skip影响性能,如果文档有点多,这个随机数有点大,就不适合了。 换个思路,我们可以在每个文档加一个随机键(random),用Math.random()方法生成随机数,存放进文档里。查询的时候,同样用Math.random()生成一个随机数,返回一条集合中随机数小于这个随机数的文档。当然,也有可能没有小于这个随机数的文档,但如果这样,就必定有一个大于等于这个随机数的文档,除非集合是空的。

var random=Math.random();
var result=db.user.findOne({"random":{"$lt":random}});
if(result==null)
{
   result=db.user.findOne({"random":{"$gte":random}});
}