地址位置索引:将一些点的位置存储在mongodb中,创建索引后,可以按照位置来查找其他点
子分类:
、2d索引:平面地理位置索引,用于存储和查找平面上的点。
、2dsphere索引:球面地理位置索引,用于存储和查找球面上的点。
查找方式:
、查找距离某个点一定距离内的点。
、查找包含在某区域内的点。
  比如当前打车软件比较火,当确定某个乘客的点的时候,服务器需要确定某个范围内的出租车,接收乘客的搭车请求,这个时候就可以使用mongodb的地理位置索引去完成这样的需求
  比如在使用团购网站时,距离我们最近的餐馆,也可以使用mongodb的地理位置索引去完成。

mongodb的地理位置索引十分强大,可以节省其他数据库所要花费的大量时间来完成应用。

2d索引
创建方式:
db.collection.ensureIndex({w:'2d'})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-,] 纬度[- ]
> db.location.ensureIndex({'w':'2d'})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : ,
"numIndexesAfter" : ,
"ok" :
}
插入几条数据
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
> db.location.insert({w:[,]})
WriteResult({ "nInserted" : })
我们看到经度超过180会报错,纬度超过90,但没报错,对这种点在查询中会有不可预知的错误,所以不应该插入这种点
> db.location.find()
{ "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fab72ff7510af7fc785"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b703772ff7510af7fc788"), "w" : [ , ] }
所以插入这些点
2d索引的查询方式有两种
、$near查询:查询距离某个点最近的点。
、$geoWithin查询:查询某个形状内的点。
> db.location.find({w:{$near:[,]}})
{ "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fab72ff7510af7fc785"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b703772ff7510af7fc788"), "w" : [ , ] }
我们看到所有点都返回了,原因是near会返回一百个最近的点
我们可以使用maxDistance来限制最远的点
> db.location.find({w:{$near:[,],$maxDistance:}})
{ "_id" : ObjectId("5b6b6fab72ff7510af7fc785"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa872ff7510af7fc784"), "w" : [ , ] }
{ "_id" : ObjectId("5b6b6fa572ff7510af7fc783"), "w" : [ , ] }
我们看到只返回了3个点,这种简单的,这里不支持minDistance
$geoWithin查询
形状的表示
、$box:矩形,使用
  {$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示
  都是坐标,第一个坐标表示矩形的左边界,第二个坐标表示矩形的右边界
、$center:圆形,使用
  {$center:[[<x1>,<y1>],r]}
  第一个表示圆心位置,第二个代表半径
、$polygon:多边形,使用
  {$polygon:[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]}表示
  每个数组代表一个坐标点,这些点代表一个多边形

地理位置索引 2d索引的更多相关文章

  1. SQL索引学习-索引结构

    前一阵无意中和同事讨论过一个SQL相关的题(通过一个小问题来学习SQL关联查询),很惭愧一个非常简单的问题由于种种原因居然没有回答正确,数据库知识方面我算不上技术好,谈起SQL知识的学习我得益于200 ...

  2. sphinx续5-主索引增量索引和实时索引

    原文件地址:http://blog.itpub.net/29806344/viewspace-1400942/ 在数据库数据非常庞大的时候,而且实时有新的数据插入,如果我们不更新索引,新的数据就sea ...

  3. 关于数据库表中的索引及索引列的CRUD

     -- 查询一个数据库表中的索引及索引列use [RuPengWangDB]GOSELECT  indexname = a.name , tablename = c. name , indexcolu ...

  4. 数据库索引<一> 索引结构表结构

    有很长时间没有更新博客了,再过几天都2月分了,如果再不更新一篇,我1月分都没有更新,保持连续,今天更新一篇. 最近没有什么看技术方面的东西,游戏,画画搞这些去了.我发现我每年一到年底就是搞这些东西,其 ...

  5. oracle索引,索引的建立、修改、删除

    索引,索引的建立.修改.删除 2007-10-05 13:29 来源: 作者: 网友评论 0 条 浏览次数 2986 索引索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和 ...

  6. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  7. paip.提升性能--- mysql 建立索引 删除索引 很慢的解决.

    paip.提升性能--- mysql 建立索引 删除索引 很慢的解决. 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blo ...

  8. SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 <第八篇>

    聚集索引.非聚集索引.非聚集唯一索引 我们都知道建立适当的索引能够提高查询速度,优化查询.先说明一下,无论是聚集索引还是非聚集索引都是B树结构. 聚集索引默认与主键相匹配,在设置主键时,SQL Ser ...

  9. 软件开发人员真的了解SQL索引吗(索引使用原则)

    原文:软件开发人员真的了解SQL索引吗(索引使用原则) 前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引.       索引的优点:这个显而易见,正确的 ...

随机推荐

  1. 关于SqlDataReader使用的一点疑惑

    C#中的SqlDataReader类(System.Data.SqlClient)是用来在保持打开数据库连接的状态下取数据用的 用法如下图: “保持与数据库的连接”这个特性也是SqlDataReade ...

  2. InfoQ —— 腾讯游戏大数据服务场景与应用

    简介 周东祥,本人从2010年毕业进入腾讯互动娱乐部门工作,一直致力在腾讯游戏运营开发工作.先后负责SAP业务受理系统,盗号自助系统,元数据系统以及近2年在腾讯游戏大数据运营开发中积累大量的大数据开发 ...

  3. 解读人:李琼,Metabolic profiling of tumors, sera and skeletal muscles from an orthotopic murine model of gastric cancer associated-cachexia(胃癌相关恶病质的原位小鼠模型中肿瘤,血清和骨骼肌的代谢谱分析)

    发表时间:(2019年4月) IF:3.950 单位: 厦门大学 厦门理工大学 物种:小鼠的肿瘤,血清和骨骼肌 技术:核磁共振代谢组学分析 一. 概述:(用精炼的语言描述文章的整体思路及结果) 本研究 ...

  4. d190305面试题01总结

    题目一: 题目二: 题目三: 类中的某个成员变量可以被他和他的子类访问,应该用protected 知识点: 1.类中public修饰的属性,方法可以被该类,子孙类和外部类访问. 2.类中protect ...

  5. Javascript专题(三)b.各种轮播和细节分析--上下滚动轮播

    这一次,我们用原生JS实现上下滚动方式的轮播.顺带学习一下用JS来创建HTML元素. 上一次写的轮播是淡入淡出效果的,相对来说其实是比较简单的. github源码: 上下轮播源码-github A. ...

  6. P2308 添加括号(区间DP)

    题目背景 给定一个正整数序列a(1),a(2),...,a(n),(1<=n<=20) 不改变序列中每个元素在序列中的位置,把它们相加,并用括号记每次加法所得的和,称为中间和. 例如: 给 ...

  7. Django - 回顾(1)- 模型层的Meta选项详解

    一.模型层的Meta选项详解 Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.使用方法及参数解释如下: class Book(models.Model): nid ...

  8. linux别名防删除

    最近有不相信rm -rf 了,虽然恢复了但是很难受啊 加个别名吧, 1.查看系统别名配置 alias 2.配置别名(临时生效) alias rm='echo do not use rm command ...

  9. Ubuntu ls可以查看到文件,图形界面却看不到

    解决方法:图形界面 Ctrl + h ,就可以显示出来隐藏文件

  10. Android中常用的几种加密

    1.数字摘要 是指通过算法将长数据变为短数据,通常用来标识数据的唯一性,是否被修改,常用的加密算法有md5和sha1两种,如Android的App签名也是用的这两种算法. md5具有不可逆性,也可用来 ...