Home > Database > Mysql Tutorial > body text

Mongodb中随机的查询文档记录

WBOY
Release: 2016-06-07 16:34:38
Original
1078 people have browsed it

在实际应用场景中,几乎都会有随机获取数据记录的需求。而这个需求在 Mongodb 却不是很好实现,就目前而言,大致上有三种解决方案: 先计算出一个从 0 到记录总数之间的随机数,然后采用 skip(yourRandomNumber) 方法。 为每一条记录增设 random 字段,插入

在实际应用场景中,几乎都会有随机获取数据记录的需求。而这个需求在 Mongodb 却不是很好实现,就目前而言,大致上有三种解决方案:

  1. 先计算出一个从0到记录总数之间的随机数,然后采用skip(yourRandomNumber)方法。
  2. 为每一条记录增设random字段,插入数据时赋值为Math.random(),查询时采用$gte$lte
  3. 借助 Mongodb 对地理空间索引(geospatial indexes)的支持,从而可以在第二种方法的基础上来实现随机记录的获取。

因为 Mongodb 是不建议使用skip方法的,所以这里就略去第一种方法吧。

方法二

> db.twitter.save({ username: 'heroic', random: Math.random(), content: 'balabala0...' })
> db.twitter.save({ username: 'heroic', random: Math.random(), content: 'balabala1...' })
> db.twitter.save({ username: 'heroic', random: Math.random(), content: 'balabala2...' })
> db.twitter.save({ username: 'heroic', random: Math.random(), content: 'balabala3...' })
> db.twitter.save({ username: 'heroic', random: Math.random(), content: 'balabala4...' })
/* more records... */
/* create index */
> db.twitter.ensureIndex({ username: 1, random: 1 })
> rand = Math.random()
> result = db.twitter.findOne({ username: 'heroic', random: { $gte: rand } })
> if (result == null) {
>   result = db.twitter.findOne({ username: 'heroic', random: { $lte: rand } })
> }
Copy after login

方法三

> db.twitter.save({ username: 'heroic', random: [Math.random(), 0], content: 'balabala0...' })
> db.twitter.save({ username: 'heroic', random: [Math.random(), 0], content: 'balabala1...' })
> db.twitter.save({ username: 'heroic', random: [Math.random(), 0], content: 'balabala2...' })
> db.twitter.save({ username: 'heroic', random: [Math.random(), 0], content: 'balabala3...' })
> db.twitter.save({ username: 'heroic', random: [Math.random(), 0], content: 'balabala4...' })
/* more records... */
/* create index */
> db.twitter.ensureIndex({ username: 1, random: '2d' })
> result = db.twitter.findOne({ username: 'heroic', random: { $near: [Math.random(), 0] } })
Copy after login

更多关于 Mongodb 地理空间索引资料,请参见这里。

目前这几种方案似乎都不是很理想,但是也没有其他办法了,所以广大程序员们就相约到 Mongodb 的官方 jira 提了相应的需求,但是目前仍然没有任何的响应。可以参见这里,围观一下。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!