转:Mongodb中随机的查询文档记录
简述,摘要:在实际应用场景中,几乎都会有随机获取数据记录的需求。而这个需求在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 }})>}
方法三
> 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]}})
更多关于Mongodb地理空间索引资料,请参见这里。
目前这几种方案似乎都不是很理想,但是也没有其他办法了,所以广大程序员们就相约到Mongodb的官方jira提了相应的需求,但是目前仍然没有任何的响应。可以参见这里,围观一下。
不知道大家谁还有更好的方法吗?
原文来自于:http://cnodejs.org/topic/51cee62873c638f3707d0e49
转:Mongodb中随机的查询文档记录的更多相关文章
- MongoDB(四):数据类型、插入文档、查询文档
1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...
- mongodb查询文档
说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb ...
- MongoDB基础教程系列--第四篇 MongoDB 查询文档
查询文档 查询文档可以用 find() 方法查询全部文档,可以用 findOne() 查询第一个文档,当然还可以根据 条件操作符 和 $type操作符 查询满足条件的文档. find() 和 find ...
- MongoDB 教程(八):查询文档、条件操作符
MongoDB 查询文档 MongoDB 查询文档使用 find() 方法. find() 方法以非结构化的方式来显示所有文档. MongoDB 查询数据的语法格式如下: db.collection. ...
- mongodb的基本操作与插入文档(document)
一.mongodb的基本操作: 1.查看mongodb当前所有的databases : show dbs 2.选择数据库(database) : use databaseName(该数据库不存在则会自 ...
- MongoDB(二)创建更新删除文档
插入并保存文档操作 用insert向目标集合插入文档,如果没有_id键则会自动添加.最后自动保存. >db.foo.insert({"bar":"baz" ...
- MongoDB增删改查表文档
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...
- MongoDB数据库、集合、文档的操作
MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...
- ES 07 - Elasticsearch查询文档的六种方法
目录 1 Query String Search(查询串检索) 2 Query DSL(ES特定语法检索) 3 Query Filter(过滤检索) 4 Full Text Search(全文检索) ...
随机推荐
- Java调用R(三)_系统命令调用
java通过配置的系统命令Rscript直接调用R脚本. 优点:R脚本和Java代码完全分离 缺点:R中变量不能控制 1. Java本地能够成功调用. public void CallR() { Ru ...
- 安装Wamp后 Apache无法启动的解决方法
安装Wamp后 Apache无法启动的解决方法,网上的解决方案可以说是五花八门,有些说了一大推,一点作用都起不到. 其实解决方法只需两步: 1.安装路径不能包含有中文,这个我不知道为什么,总之如果安装 ...
- LINUX curl GET 掉参数解决办法
LINUX curl GET 掉参数解决方法 url 为 http://mywebsite.com/index.php?a=1&b=2&c=3web形式下访问url地址,使用 $_GE ...
- Atom 编辑器 前端基本插件
Atom 编辑器插件 这个编辑器是github出品,现在处于免费试用期:如果是初学者,可以使用这个编辑器,插件安装很方便,只需要点菜单栏的File-Settings-Install,在搜索框中输入想要 ...
- 用 Java 技术创建 RESTful Web 服务--转载
简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...
- Need a code of lazy load for div--reference
1. For all DIVs of a page $(function() { $("div").lazyload({effect: 'fadeIn'});}); 2. For ...
- Python之路,Day13-----暂无正在更新中
Python之路,Day13-----暂无正在更新中
- AS 进行单元测试
以下为本人在AndroidStudio 2.0 上实测后得出的结论,不像网上那一堆堆的误人子弟的文章,都是过时的或者根本就是不对的. 简介 和eclipse需要配置清单文件不同,AndroidStud ...
- My.Ioc 代码示例——使用观察者机制捕获注册项状态的变化
在 My.Ioc 中,要想在服务注销/注册时获得通知,可以通过订阅 ObjectBuilderRegistered 和 ObjectBuilderUnregistering 这两个事件来实现.但是,使 ...
- WPF概述
一.概述 WPF(Windows Presentation Foundation,视窗展示[呈现.展现.显示.表示]基础)是Windows的新一代图形子系统,他为开发人员提供了统一的编程模型,可用于构 ...