`
ssxxjjii
  • 浏览: 950907 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mongodb 地理位置索引

    博客分类:
  • IM
 
阅读更多

Geospatial Indexing

     MongoDB支持二维空间索引,这是设计时考虑到基于位置的查询。例如“找到离目标位置最近的N条记录”。可以有效地作为附加条件过滤。

     如果需要使用这种索引,应确定对象中存储的字段是子对象或数组,前两个元素为X,Y坐标(或者Y,X坐标,保持一致即可。it might be advisible to use order-preserving dictionaries/hashes in your client code, to ensure consistency),一些例子:

 

Mongo代码  

{ loc : [ 50 , 30 ] }  

{ loc : { x : 50 , y : 30 } }  

{ loc : { foo : 50 , y : 30 } }  

{ loc : { lat : 40.739037, long: 73.992964 } }  

 

   Creating the Index

 

Mongo代码  

db.places.ensureIndex( { loc : "2d" } )     //应该是固定格式  

 

     默认的,Mongo假设你索引的是经度/维度,因此配置了一个从-180到180的取值范围,如果你想索引更多,可以指定该参数:

 

Mongo代码  

db.places.ensureIndex( { loc : "2d" } , { min : -500 , max : 500 } )  

 

     上面的代码将衡量索引保证存入的值在-500到500的范围之内。一般来说geo索引仅限于正方形以内且不包括边界以以外的范围,不能再边界上插入值,比如使用上面的代码,点(-500,-500)是不能被插入的。

 

     目前为止,每个Collection只能建立一个geo索引

 

    Querying

      该索引可以被用来精确匹配:

 

Mongo代码  

db.places.find( { loc : [50,50] } )  

 

     对于geo索引来说,更重要的是一个查询可以找到目标点附近的点,不必要精确匹配。

 

Mongo代码  

db.places.find( { loc : { $near : [50,50] } } )  

 

     上面的一句将按离目标点(50,50)距离最近的100个点(距离倒序排列),如果想指定返回的结果个数,可以使用limit()函数,若不指定,默认是返回100个。

 

Mongo代码  

db.places.find( { loc : { $near : [50,50] } } ).limit(20)  

 

    Compound Indexes

      Mongo空间索引可选的支持第二字段索引.如果想用坐标和其他属性同事作为条件查询,把这个属性也一同索引,其他属性带注释性的加入索引中可使过滤更快。

 

Mongo代码  

db.places.ensureIndex( { location : "2d" , category : 1 } );  

db.places.find( { location : { $near : [50,50] }, category : 'coffee' } );  

 

    geoNear Command

      虽然find()语法为查询的首选,Mongo也提供来了 geoNear 命令来执行相似的函数。geoNear命令有一个额外的好处是结果中返回距离目标点的距离,以及一些利于排除故障的信息。

Mongo代码  

> db.runCommand( { geoNear : "places" , near : [50,50], num : 10 } );  

> db.runCommand({geoNear:"asdf", near:[50,50]})  

{  

        "ns" : "test.places",  

        "near" : "1100110000001111110000001111110000001111110000001111",  

        "results" : [  

                {  

                        "dis" : 69.29646421910687,  

                        "obj" : {  

                                "_id" : ObjectId("4b8bd6b93b83c574d8760280"),  

                                "y" : [  

                                        1,  

                                        1  

                                ],  

                                "category" : "Coffee"  

                        }  

                },  

                {  

                        "dis" : 69.29646421910687,  

                        "obj" : {  

                                "_id" : ObjectId("4b8bd6b03b83c574d876027f"),  

                                "y" : [  

                                        1,  

                                        1  

                                ]  

                        }  

                }  

        ],  

        "stats" : {  

                "time" : 0,  

                "btreelocs" : 1,  

                "btreelocs" : 1,  

                "nscanned" : 2,  

                "nscanned" : 2,  

                "objectsLoaded" : 2,  

                "objectsLoaded" : 2,  

                "avgDistance" : 69.29646421910687  

        },  

        "ok" : 1  

}  

 

     上面的命令将返回10条距离点(50,50)最近的记录,loc字段由该collection的空间索引自动检测后决定。

     如果你想添加一条过滤条件,可以这样:

Mongo代码  

> db.runCommand( { geoNear : "places" , near : [ 50 , 50 ], num : 10,  

... query : { type : "museum" } } );  

 

    Bounds Queries

    v1.3.4版本以上

     $within 参数可以代替$near来查找一个形状之内结果。同时,也支持$box(矩形)和$center(圆环)

    想要查找一个一个矩形之内所有的点,必须制定该矩形的左下角和右上角坐标:

Mongo代码  

> box = [[40, 40], [60, 60]]  

> db.places.find({"loc" : {"$within" : {"$box" : box}}})  

 

更多信息请参考

http://www.mongodb.org/display/DOCS/Geospatial+Indexing

分享到:
评论

相关推荐

    MongoDB数据库索引介绍.pptx

    地理位置索引是一种特殊的索引类型,用于提高地理位置字段的查询性能。 ### 全文索引 全文索引是一种特殊的索引类型,用于提高文本字段的查询性能。 ### TTL 索引 TTL 索引是一种特殊的索引类型,用于自动删除...

    MONGODB的索引探究

    5. 地理索引:专为地理位置数据设计,支持地理空间查询,如查找附近位置等。 6. 文本索引:用于全文搜索,不存储停顿词和主干词,只存储基础词根,提高文本搜索效率。 7. 哈希索引:仅支持等值匹配查询,不支持...

    PHP实现搜索地理位置及计算两点地理位置间距离的实例

    mongodb地理位置索引,2d和2dsphere,对应平面和球面。 1.创建lbs集合存放地点坐标 use lbs; db.lbs.insert( { loc:{ type: Point, coordinates: [113.332264, 23.156206] }, name: 广州东站 } ) db.lbs....

    MongoDB 位置信息存储及查询

    2. **创建地理位置索引**: 要进行有效的地理位置查询,需要先为包含地理位置字段的集合创建地理空间索引。在 MongoDB 中,可以使用 `createIndex()` 方法创建 `2dsphere` 或 `2d` 索引,前者适用于球面几何,后者...

    MongoDB索引管理与高级索引.pdf

    - **地理空间索引**:支持地理位置查询,如最近邻搜索或矩形范围查询。 - **哈希索引**:用于对值进行散列,适合等值查询,但不支持排序和范围查询。 - **部分索引**:只在满足特定条件的文档上创建索引,节省...

    haversine-rest-api:此Api比较“ Haversine”公式和MongoDB地理空间索引返回的结果

    此Api比较“ Haversine”公式和MongoDB地理空间索引和查询功能返回的结果。 当给出位置时,我们需要获取半径内的所有附近点。 使用JSON Web令牌进行基于令牌的用户身份验证。 使用“ Haversine”公式来计算给定...

    mongodb搭建,shell操作,索引,副本集

    - **2dsphere和2d索引**:用于地理位置数据的索引。 - **全文索引**:支持文本搜索功能的索引。 - **哈希索引**:适用于某些特殊场景的索引。 - **索引操作**: - **查看索引**:使用`db.collection.getIndexes...

    nodejs-mongoose-geospatial:使用NodeJ和MongoDB地理空间索引查找最近的地方

    MongoDB提供了强大的地理空间功能,使得开发地理位置相关的应用变得更加简单。以下是这个项目的核心知识点: 1. **Node.js**:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务端使用...

    MongoDB索引与查询.pdf

    **地理空间索引**则用于处理地理位置相关的查询,例如计算最近的地点或在特定区域内查找点或形状。 在设计索引时,应考虑以下因素: - **查询模式**:根据应用程序的查询模式来确定应该为哪些字段创建索引。 - **...

    MongoDB索引管理.pdf

    - 地理空间索引:用于地理位置数据的快速查询。 - 散列索引:用于全文搜索和哈希查找。 5. **索引优化** - 使用 `explain()` 方法可以分析查询的执行计划,帮助你了解索引是否被有效地使用。 - 创建合适的复合...

    MongoDB中创建索引需要注意的事项

    - 地理空间索引:用于地理位置数据的查询和聚合。 - 全文索引:支持文本搜索功能。 7. **索引维护**: - 定期评估和调整索引,以适应数据和查询模式的变化。 - 删除不再使用的索引,以减少存储开销和维护成本。...

    Mongodb基础知识详解(值得珍藏).pdf

    此外,MongoDB支持创建索引,包括全文索引、地理位置索引等,以提高查询性能。查询操作丰富,几乎涵盖了SQL中的大部分功能。 MongoDB的另一个优势在于其可扩展性。它支持自动分片和副本集,分片能将数据分散到多个...

    mongodb资料,快速上手

    * 地理位置索引 MongoDB 的索引管理包括创建索引、查看索引、删除索引等操作。 Spring Data MongoDB Spring Data MongoDB 是一个基于 Spring 的 MongoDB 数据访问框架。它可以帮助开发者快速开发 MongoDB 应用...

    MongoDB应用设计模式:MongoDB Applied Design Patterns

    - **地理空间查询**:对于地理位置相关应用,MongoDB支持地理索引,提供高效的地理查询功能。 4. 性能调优: - **硬件选择**:如何根据工作负载选择适当的硬件配置,包括CPU、内存、磁盘类型等。 - **监控和诊断...

    巧妙的利用Mongodb做地理空间查询

    在MongoDB中,地理位置索引允许我们对地址数据进行高效检索。它提供了多种类型,如2d、2dsphere和GeoJSON,以适应不同的地理位置表示需求。2d索引适用于平面坐标系统,而2dsphere索引则用于球面坐标系统,更贴近地球...

    深入剖析 MongoDB 架构

    MongoDB 支持单字段、复合字段以及地理位置索引等多种类型的索引。通过合理地创建和使用索引,可以显著提升查询速度。 在工具方面,MongoDB 提供了一系列管理工具,如 `mongod`(数据库服务器)、`mongos`(路由...

    MongoDB3.2

    3. **索引增强**:3.2版本引入了`$**`全局文本索引,可以对所有文本字段自动创建索引,以及对地理位置索引(2dsphere)进行了优化,支持更复杂的地理空间查询。 4. **安全增强**:MongoDB 3.2加强了身份验证和访问...

    php结合mongodb判断坐标是否在指定多边形区域内的实例

    MongoDB是一款强大的NoSQL数据库,支持丰富的地理空间索引,使得处理地理位置数据变得简单高效。而PHP作为一种常用的服务器端脚本语言,是实现这一功能的理想选择。 首先,让我们了解MongoDB中的地理空间索引。...

    spring mongodb 中文文档

    MongoDB 支持地理空间索引和查询,Spring Data 提供了相应的API 来处理地理位置数据。 10. **索引管理** 可以通过`@Indexed` 注解创建索引,或者使用MongoTemplate 手动管理索引。索引有助于提高查询性能。 11. ...

    MongoDB总结,文件为md 格式 可以利用Typora打开文件

    - **地理位置索引**: 内建支持地理空间索引,便于进行地理位置相关的查询。 - **聚合框架**: 提供类似SQL的聚合管道,用于数据处理和分析。 ### 3. MongoDB安装与配置 - MongoDB提供了多种平台的安装包,包括...

Global site tag (gtag.js) - Google Analytics