3.6.4 地理信息索引

地理信息索引分为两类:2D平面索引,2DSphere球面索引。在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标。

范例:定义一个shop的集合

db.shop.insert({loc : [10, 10]})  # loc表示坐标

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 : [150, 160]})

范例:为shop的集合定义2D索引

db.shop.ensureIndex({"loc" : "2d"})  # 2d不能写成2D

(automatically 机械的,自动的)

这个时候shop集合就可以实现坐标位置的查询了,而要进行查询有两种查询方式:

  • "$near"查询:查询距离某个点最近的坐标点
  • "$geoWithin"查询:查询某个形状内的点

范例:查询坐标是:[11, 11]附近的点

db.shop.find({loc : {"$near" : [11, 11]}})

执行上面代码会将数据集合里面的前100 个点的信息都返回。

现在设置范围——两点距离最大为5:

范例:设置范围

db.shop.find({loc : {"$near" : [11, 11], "$maxDistance" : 5}})  # "$maxDistance"最大距离是5(此处为欧式距离)

注意一点,在2D索引里面支持最大距离,但是不支持最小距离。

但可以使用"$geoWithin"设置一个查询范围,设置范围如下:

矩形范围($box):{"$box" : [[x1, y1], [x2, y2]]}

圆形范围($center):{"$center" : [[x1, y1], r]}

多边形($polygon):{"$polygon" : [[x1, y1], [x2, y2], [x3, y3],...]}  # polygon多边形

范例:查询矩形

db.shop.find({loc : {"$geoWithin" : {"$box" : [[9, 9], [11, 11]]}}})

范例:查询圆形

db.shop.find({loc : {"$geoWithin" : {"$center" : [[10, 10], 2]}}})

在MongoDB里面,除了一些支持操作函数之外,还有一个重要的命令:runCommand(),这个函数可以执行所有的特定的MongoDB命令。

范例:利用runCommand()实现信息查询

db.runCommand({"geoNear" : "shop", near : [10, 10], "$maxDistance" : 5, num : 2})

db.runCommand({"geoNear" : "shop", near : [10, 10], maxDistance : 5, num : 2})

results中有两个结果,即返回两条数据;

"nscanned":33,表示扫描了33条数据;

"avgDistance":0.5,表示扫描平均距离0.5;

"maxDistance":1,表示最大距离1;

"time":11,表示扫描用时11毫秒。

runCommand命令是MongoDB中最为基础的命令。

MongoDB(课时25 地理信息索引)的更多相关文章

  1. mongoDB常见的查询索引(三)

    1. _id索引     _id索引是绝大多数集合默认建立的索引     对于每个插入的数据,MongoDB会自动生成一条唯一的_id字段. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  2. 第30章:MongoDB-索引--地理信息索引

    ①地理信息索引 地理信息索引分为两类:2D平面索引,另外就是2DSphere球面索引.在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标. 范例:定义一个商铺的集合 db.sho ...

  3. MongoDB 常见的查询索引

    常见的查询索引 _id索引         _id 索引是绝大多数集合默认建立的索引.对于每一个插入的数据.MongoDB 会自己主动生成一条唯一的 _id 字段. 1 2 3 4 5 6 7 8 9 ...

  4. 【mongoDB中级篇②】索引与expain

    索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用bt ...

  5. MongoDB系列四(索引).

    一.索引简介 再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似.有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,这能使查找速度提高 ...

  6. MongoDB优化,建立索引实例及索引机制原理讲解

    MongoDB优化,建立索引实例及索引机制原理讲解 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样 ...

  7. Mongodb 笔记04 特殊索引和集合、聚合、应用程序设计

    特殊索引和集合 1. 固定集合:固定集合需要事先创建好看,而且它的大小是固定的.当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除. 2. 创建固定集合:db.createC ...

  8. mongodb学习笔记之索引(转)

    一.索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({" ...

  9. MongoDB(课时22 过期索引)

    3.6.2 过期索引 在一些程序的站点会出现若干秒之后信息被删除的情况,例如:手机信息验证码,那么在MongoDB里面可以轻松实现过期索引.但这个时间往往不怎么准确. 范例:设置过期索引(实现过期索引 ...

随机推荐

  1. 什么时候block 是放在全局区里面的?

    When a Block literal is written where there are global variables When the syntax in a Block literal ...

  2. Ghost硬盘对拷

    Ghost硬盘对拷 优点:全盘完全100%对拷,包括原有操作系统也可使用.新硬盘对拷结束后,可直接插上电脑使用.消耗时间最短. 困难:对于第一次操作Ghost对拷的新人来说,需要严格对照图片步骤教程. ...

  3. Keepalived+HAproxy实现高可用负载均衡

    总概:       Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态, ...

  4. iOS 网易彩票-2框架搭建-代码重构

    在上一篇中,我们基本已经把整个框架都搭建出来了,下面进行代码重构一下. 思路: 导航按钮,按下时,会变灰,那是系统自带了,通过自定义UIButton,实现按下按钮立即切换效果. MJTabBarCon ...

  5. PhoneGap+Cordova+SenchaTouch-01-环境搭建

    转http://my.oschina.net/zhongwenhao/blog/369465 环境搭建基于 windows  ,mac系统可以借鉴 1.安装NodeJS 和ruby http://no ...

  6. C# Bulk Operations(转)

    转自http://blog.csdn.net/winnyrain/article/details/51240684 Overcome SqlBulkCopy Limitations with C# B ...

  7. PowerDesigner 表格导出为excel

    PD菜单栏中,依次点击 Tools ->Excute Commands->Edit/Run Script.. 填入 '*********************************** ...

  8. 教你玩转产品管理系统iClap(基础功能篇)

    距iClap这款宇宙级产品的推出已经有一段时间了,相信不少小伙伴们都已经开始使用上了,多好用多方便,就不用说了,可不想违反广告法呢!不过还是有用户反映说某些功能不太了解,或者还有一些不清楚的操作方式, ...

  9. Rpgmaker开发心得(1)且事件

    例:NPC让你给他桃子和梨子,然后给你西瓜. 实际就是:有桃子且有梨子时的判断,但对于大多数不会直接编写脚本的同学,最好的方式就是使用开关. 思路如下: var:变量 on:开关 if(on西瓜=on ...

  10. ASCII说明和ASCII对照表

    ASCII 说明 ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符.标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字 ...