MongoDB笔记—索引.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
索引 创建索引 MongoDB索引和关系型数据库规则是一样的,在经常要用到的查询列建立索引。建立索引使用ensureIndex({列名 : 1, 列名2 : -1})等这种方式,1代表升序,-1代表降序。建立复合索引之前一定要考虑索引的方向,到底是升序好,还是降序。其次还要考虑列的顺序,如果要建立用户名和日期的索引,经常要用到最近几天的记录,则把日期排在前面比较好。 索引内嵌文档中的键使用如下: 当建立一个索引的时候,系统默认索引名为keyname1_dir1_keyname2…这种形式,其中keyname1代表索引的键,dir1代表方向。不过可以通过ensureIndex第二个参数指定索引名。如下: 可以为第二个参数设定unique:true来指定唯一索引: 注意:默认情况下insert并不检查文档是否插入了,为了避免插入文档中与唯一键重复,需要用安全插入才能。 如果集合中已经有些值重复了,要创建唯一索引,可以使用dropDups:true来删除重复的文档,只保留第一个被发现的文档,如下: 可以在第二个参数中,添加“background”:true来使得在后台建立索引,如果没有此选项,则在建立索引期间,数据库会阻塞建立索引期间的所有请求。虽然阻塞时,建立索引更快,但是不能进行处理,因此权衡会更好。 删除索引使用以下命令: 其中foo为数据库名,age_1为索引名。如果指定索引名为*,则把该数据库下所有索引都删除。 explain和hint 和mysql一样,mongoDB也有explain,只要对游标调用该方法,就可以得到查询细节,explain会返回一个文档,而不是游标本身。 结果要点: 1.cursor:basicCursor 说明查询没有使用到索引,因为没使用查询条件 2.nscanned:2 表示数据库查找了多少文档 3.n:2 数据库返回文档的数量 4.millis:0 表示查询所用的时间 比如插入一条数据: 建立索引: 使用explain分析: 因为使用了索引,索引cursor就有了。索引存储在B树的结构中,当使用索引查询的时候,索引名字为BtreeCursor类型的游标。 系统有个集合专门存储所有信息:db.systems.indexes 查询结果: 如果发现mongoDB使用了非预期的索引,可以用hint强制使用某个所有,如希望使用{username:1,age:1}索引,如下: 地理空间索引 现在有种查询很热门:找到离当前位置最近的N各场所。MongoDB为坐标平面查询提供了专门的索引,称作地理空间索引。 如要查找给定位置的最近咖啡馆,需要创建一个专门的索引来提高查询效率。因为这种查询需要搜索两个维度。创建空间索引如下:参数值不是使用1或者-1,而是用2d。 索引键gps必须是某种形式的一对值:一个包含两个元素的数组或是包含两个键的内嵌文档,如下: 默认情况下,地理空间索引取值范围是-180到180(经纬度很方便)。要是想用其他值,可以设定: 这样就创建了一个2000光年见方的空间索引。 地理空间索引查询两种方式:普通查询(find)或者使用数据库命令。 find查询与一般查询类似,只不过要用“$near”,需要两个目标值的数组作为参数,如: 这样会按照离点(40,-73)由近及原的方式将map集合所有文档都返回,也可以在后面添加limit,来指定结果数。如下: 也可以用geoNear来完成: geoNear还会返回每个文档到查询点的距离。这个距离是以你插入的数据为单位的,如果按照纬度的角度插入,则距离就是经纬度。find与“$near”不会给出距离,但是若结果大于4MB,geoNear就不能使用了。 “$within”可以指定形状内的文档。对于矩形使用$box,如下: $box参数时两个元素的数组,分别为左下角和右上角坐标。 也可以用“$center”来找到圆形内部的所有点,不过参数变成圆心和半径。 也可以建立复合地理空间索引,如下: 这样就以location创建了地理空间索引和以desc的升序索引。查找时: 聚合 count 返回集合中的文档数量,如: 也可以传递参数,如下: distinct 对指定列使用,和关系数据库一样,如有文档: 指定age唯一,如下: 结果如下: 还有一个问题:有没有方法获得集合里面所有不同的键呢?起码没有内置的,不过MapReduce可以。 group 和关系数据库的group by类似,使用分组,MongoDB通过聚合每一组内的文档,产生一个结果文档。 5

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档