MongoDB如何随机获取若干条记录-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MongoDB如何随机获取若干条记录

2016-06-29 10:06:37 2335 1

在MySQL中,可以通过下面的语句简单的获取随机的5条记录:

SELECT * FROM table ORDER BY RAND() LIMIT 5
但是在MongoDB下,没有找到rand()方法,而且ObjectID也不是MySQL那样整数的,不好随机,不知道大家有什么好办法?

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:48:47

    实际上有在讨论是不是要增加这个特性:https://jira.mongodb.org/browse/SERVE...,目前看来没有实质进展。

    其实MySQL里也只是创建一个临时表,为所有的备选行生成一个随机数,然后针对这个随机数进行排序获得你需要的结果。

    在MongoDB里,你得自行为doc构建这样的排序属性,这个属性的值可以是一个随机数,从cookbook里摘过来的:

    db.docs.save( { key : 1, ..., random : Math.random() } )
    查找的时候,也算个随机数出来,然后去排序属性里找最接近它的,不过记得给排序属性加索引:

    rand = Math.random()
    cmp = Math.random()
    result = db.docs.findOne( { key : 2, random : { $gte : rand } } )
    if ( result == null ) {

    result = db.docs.findOne( { key : 2, random : { $lte : rand } } )

    }
    因为排序属性的值不像MySQL里是动态的,所以如果要真正随机地获取多个doc,还就得循环上面的操作。

    我想这个问题的根本还是,是否需要数学意义上的随机,如果只是要个大概,对于大数据量,不加索引的时候,可以用Map/Reduce提高收敛速度。

    所以呢,其实用时间戳也行,任何能找出来上下限值,同时别太多重复值的属性都可以用来做随机排序。

    0 0
相关问答

1

回答

mongoDB分片搭建过程是什么?

2021-12-14 21:35:42 414浏览量 回答数 1

1

回答

mongoDB分片建议是什么?

2021-12-14 21:37:43 416浏览量 回答数 1

1

回答

MongoDB 功能定位是怎样的

2021-01-08 16:39:43 514浏览量 回答数 1

1

回答

MongoDB Oplog 保留策略是怎样的

2021-01-08 17:23:15 550浏览量 回答数 1

1

回答

MongoDB云上灾备若干问题

2018-11-20 09:31:23 492浏览量 回答数 1

2

回答

mongodb如何按照list的排序获取结果?

2016-02-27 11:49:39 2667浏览量 回答数 2

1

回答

php下mongodb如何删除一条纪录?

2016-02-19 11:09:06 1877浏览量 回答数 1

1

回答

MongoDB命令行下是否有格式化find()返回结果的方法

2016-02-13 16:09:22 1798浏览量 回答数 1

1

回答

mongodb关联多表查询

2016-02-18 11:15:07 3217浏览量 回答数 1

1

回答

mongodb 联合查询问题

2016-02-14 09:42:31 1864浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载