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
相关推荐
地理位置索引是一种特殊的索引类型,用于提高地理位置字段的查询性能。 ### 全文索引 全文索引是一种特殊的索引类型,用于提高文本字段的查询性能。 ### TTL 索引 TTL 索引是一种特殊的索引类型,用于自动删除...
5. 地理索引:专为地理位置数据设计,支持地理空间查询,如查找附近位置等。 6. 文本索引:用于全文搜索,不存储停顿词和主干词,只存储基础词根,提高文本搜索效率。 7. 哈希索引:仅支持等值匹配查询,不支持...
mongodb地理位置索引,2d和2dsphere,对应平面和球面。 1.创建lbs集合存放地点坐标 use lbs; db.lbs.insert( { loc:{ type: Point, coordinates: [113.332264, 23.156206] }, name: 广州东站 } ) db.lbs....
2. **创建地理位置索引**: 要进行有效的地理位置查询,需要先为包含地理位置字段的集合创建地理空间索引。在 MongoDB 中,可以使用 `createIndex()` 方法创建 `2dsphere` 或 `2d` 索引,前者适用于球面几何,后者...
- **地理空间索引**:支持地理位置查询,如最近邻搜索或矩形范围查询。 - **哈希索引**:用于对值进行散列,适合等值查询,但不支持排序和范围查询。 - **部分索引**:只在满足特定条件的文档上创建索引,节省...
此Api比较“ Haversine”公式和MongoDB地理空间索引和查询功能返回的结果。 当给出位置时,我们需要获取半径内的所有附近点。 使用JSON Web令牌进行基于令牌的用户身份验证。 使用“ Haversine”公式来计算给定...
- **2dsphere和2d索引**:用于地理位置数据的索引。 - **全文索引**:支持文本搜索功能的索引。 - **哈希索引**:适用于某些特殊场景的索引。 - **索引操作**: - **查看索引**:使用`db.collection.getIndexes...
MongoDB提供了强大的地理空间功能,使得开发地理位置相关的应用变得更加简单。以下是这个项目的核心知识点: 1. **Node.js**:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务端使用...
**地理空间索引**则用于处理地理位置相关的查询,例如计算最近的地点或在特定区域内查找点或形状。 在设计索引时,应考虑以下因素: - **查询模式**:根据应用程序的查询模式来确定应该为哪些字段创建索引。 - **...
- 地理空间索引:用于地理位置数据的快速查询。 - 散列索引:用于全文搜索和哈希查找。 5. **索引优化** - 使用 `explain()` 方法可以分析查询的执行计划,帮助你了解索引是否被有效地使用。 - 创建合适的复合...
- 地理空间索引:用于地理位置数据的查询和聚合。 - 全文索引:支持文本搜索功能。 7. **索引维护**: - 定期评估和调整索引,以适应数据和查询模式的变化。 - 删除不再使用的索引,以减少存储开销和维护成本。...
此外,MongoDB支持创建索引,包括全文索引、地理位置索引等,以提高查询性能。查询操作丰富,几乎涵盖了SQL中的大部分功能。 MongoDB的另一个优势在于其可扩展性。它支持自动分片和副本集,分片能将数据分散到多个...
* 地理位置索引 MongoDB 的索引管理包括创建索引、查看索引、删除索引等操作。 Spring Data MongoDB Spring Data MongoDB 是一个基于 Spring 的 MongoDB 数据访问框架。它可以帮助开发者快速开发 MongoDB 应用...
- **地理空间查询**:对于地理位置相关应用,MongoDB支持地理索引,提供高效的地理查询功能。 4. 性能调优: - **硬件选择**:如何根据工作负载选择适当的硬件配置,包括CPU、内存、磁盘类型等。 - **监控和诊断...
在MongoDB中,地理位置索引允许我们对地址数据进行高效检索。它提供了多种类型,如2d、2dsphere和GeoJSON,以适应不同的地理位置表示需求。2d索引适用于平面坐标系统,而2dsphere索引则用于球面坐标系统,更贴近地球...
MongoDB 支持单字段、复合字段以及地理位置索引等多种类型的索引。通过合理地创建和使用索引,可以显著提升查询速度。 在工具方面,MongoDB 提供了一系列管理工具,如 `mongod`(数据库服务器)、`mongos`(路由...
3. **索引增强**:3.2版本引入了`$**`全局文本索引,可以对所有文本字段自动创建索引,以及对地理位置索引(2dsphere)进行了优化,支持更复杂的地理空间查询。 4. **安全增强**:MongoDB 3.2加强了身份验证和访问...
MongoDB是一款强大的NoSQL数据库,支持丰富的地理空间索引,使得处理地理位置数据变得简单高效。而PHP作为一种常用的服务器端脚本语言,是实现这一功能的理想选择。 首先,让我们了解MongoDB中的地理空间索引。...
MongoDB 支持地理空间索引和查询,Spring Data 提供了相应的API 来处理地理位置数据。 10. **索引管理** 可以通过`@Indexed` 注解创建索引,或者使用MongoTemplate 手动管理索引。索引有助于提高查询性能。 11. ...
- **地理位置索引**: 内建支持地理空间索引,便于进行地理位置相关的查询。 - **聚合框架**: 提供类似SQL的聚合管道,用于数据处理和分析。 ### 3. MongoDB安装与配置 - MongoDB提供了多种平台的安装包,包括...