MongoDB 游标和索引
2016-07-26 11:08
204 查看
游标
游标是指数据可以一行行的进行操作,非常类似于 ResultSet 数据处理。在 MongoDB 数据库里面,对于游标的控制非常简单,只需要使用 find() 函数就可以返回游标了。对于返回的游标,若要想进行操作,则使用以下两个函数:
判断是否有下一行数据:hasNest()
取出当前数据:next()
例如:
var cursor = db.students.find(); cursor.hasNext(); cursor.next();
以上是游标的操作形式,但是是实际上不可能这么去用,因为必须利用循环才能够输出内容。
范例:编写具体的操作代码
var cursor = db.students.find(); while(cursor.hasNext()){ var doc = cursor.next(); print(doc.name); }
相当于每一个数据都单独拿出来进行逐行的控制。当游标数据取出来之后,实际上每行数据返回的都是一个 Object类型的内容,那么如果需要将数据按照 json 的形式出现,则可以使用 printjson() 函数完成。代码如下:
var cursor = db.students.find(); while(cursor.hasNext()){ var doc = cursor.next(); printjson(doc.name); }
在所有的已知数据库,只有 MongoDB 的游标操作是最简单,最直观的。
索引
在任何的数据库之中,索引都是一种提升数据库检索性能的手段,这一点在 MongoDB 数据库之中同样是存在的。MongoDB 索引创建分为两种:自动创建和手工创建。
这里写代码片
此时在 students 集合上并没有去设置任何的索引,通过 getIndexes()
范例:查询默认状态下的 students 集合的索引内容
db.students.getIndexes();
若创建自己的索引,语法如下:
索引创建:db.集合名称.ensureIndex({“列”: 1})
设置 1 时,表示索引将按照升序的方式进行排列
设置 -1 时,表示索引将按照降序的方式进行排列。
唯一索引
“唯一索引”主要目的是用在某一个字段上,使该字段的内容不重复。范例:创建唯一索引
db.students.ensure({"name": 1}, {"unique": true});
过期索引
在一些程序站点会出现若干秒之后,信息被删除的情况。例如:手机信息验证码。在 MongoDB 里面可以轻松实现过期索引,但是这个时间往往不怎么准确(这个特性在进行一些临时数据保存的时候非常有帮助)。范例:在一个 phones 集合里面设置过期索引
db.phones.ensureIndex({"time": 1}, {"expireAfterSeconds: 10"}) //设置索引在 10 秒后过期
全文索引
在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是利用某个字段上实现的某种查询,但是这个时候返回的信息并不会很准确,因为只能查询 A 字段或是 B 字段,而在 MongoDB 里面实现了非常简单的全文检索。范例:定义一个新的集合
db.news.insert({"title":"mldn mldnjava lxh gyh", "content": "gyh"}) db.news.insert({"title":"mldn mldnjava lxh", "content": "java"}) db.news.insert({"title":"gyh", "content": "sfq"}) db.news.insert({"title":"gyh", "content": "gry"}) db.news.insert({"title":"sfq", "content": "gry"})
范例:设置全文检索
//待续
“
$text” 判断符用于表示全文检索。
“
$search“运算符用于数据的查询,使用如下:
查询指定关键字:{“$search”: “查询关键字”}
查询多个关键字(即”或“关系):{“$search”: “查询关键字 查询关键字 …”}
查询多个关键字(即”与“关系):{“$search”: “\”查询关键字\” \”查询关键字\” …”}
查询多个关键字(排除某一个):{“$search”: “查询关键字 查询关键字 …-排除关键字”}
范例:查询单个内容
db.news.find({"$text": {"$search": "gry"}});
范例:包含有 “gry” 与 “sfq” 的信息
db.news.find({"$text": {"$search": "gry gyh"}});
范例:同时包含有 “mldn” 与 “lxh” 的内容
db.news.find({"$text": {"$search": "\"mldn\" \"lxh\""}});
范例:包含有 “mldn” 但没有 “gyh” 的内容
db.news.find({"$text": {"$search": "\"mldn\" \"lxh\" -gyh"}})
但是在进行全文检索操作的时候,还可以使用相似度的打分来判断检索成果。
范例:为结果打分
db.news.find({"text": {"$search": "gyh"}}, {"score": {"$meta": "textScore"}}) db.news.find({"text": {"$search": "gyh"}}, {"score": {"$meta": "textScore"}})
按照打分的成绩进行排列,实际上就可以实现更加准确的信息检索。
当字段太多时,可以为所有的字段设置全文检索。
范例:为所有字段设置全文检索
db.news.ensure({"$**": "text"});
地理信息索引
地理信息索引分为两类: 2D平面索引 和 2DSphere球面索引在2D平面索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标。
范例:定义一个商铺的集合
db.shop.insert({loc: [10, 10]}); db.shop.insert({loc: [11, 10]}); db.shop.insert({loc: [10, 11]}); db.shop.insert({loc: [12, 15]}); db.shop.insert({loc: [16, 17]}); db.shop.insert({loc: [90, 90]}); db.shop.insert({loc: [120, 130]});
//待续
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 如何在 Fedora 上安装 MongoDB 服务器
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- 信息安全聚合 Sec-News 的重构之路
- PostgreSQL教程(八):索引详解
- Ruby on Rails框架程序连接MongoDB的教程
- Oracle外键不加索引引起死锁示例
- oracle 索引的相关介绍(创建、简介、技巧、怎样查看) .
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- 用SQL建立索引的方法步骤
- SQL2005重新生成索引的的存储过程 sp_rebuild
- SQL效率提升之一些SQL编写建议并有效利用索引
- SQLSERVER的非聚集索引结构深度理解
- SQL Server误区30日谈 第8天 有关对索引进行在线操作的误区
- SQL Server 索引介绍
- SqlServer 索引自动优化工具
- mysql 中存在null和空时创建唯一索引的方法
- 详解sqlserver查询表索引