mongodb的地理空间索引常见的问题

创建地理空间索引注意事项

创建地理空间索引失败,提示错误信息如下

> db.places.ensureIndex({"loc":"2dsphere"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "Can‘t extract geo keys from object, malformed geometry?: { _
id: ObjectId(‘5428bb224f26d9aa1af3d844‘), name: \"Hudson River\", loc: { type: \
"Line\", coordinates: [ [ 0.0, 1.0 ], [ 0.0, 2.0 ], [ 1.0, 2.0 ] ] } }",
"code" : 16755
}

原因是多边形的点至少是4个才能创建成功

mongodb版本:mongodb-2.6。

> db.world.insert( { "name":"New England", "loc":{ "type":"Polygon", "
coordinates":[[0,1],[0,2],[1,2]] } } )这里只有3个点, 最外侧应该有两个[和]

> db.world.insert({"name":"New England", "loc":{ "type":"Polygon", "
coordinates":[[[0,1],[0,2],[1,2],[0,1]]]}})这里有4个。

创建成功提示信息如下:

> db.places.ensureIndex({"loc":"2dsphere"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}

这种错误一般都是json格式和内容不正确。

错误信息如下

"$err" : "Can‘t canonicalize query: BadValue bad geo query"

原因是type=Polygon类型,表示是多边形,至少需要有4个点(起点和终点必须一样),并且多边形有多个环组成,所以应该是数组结构,每个数组是一个多边形。

正确的格式如下:

db.places.insert({"name":"New England","loc":{"type":"Polygon","coordinates":[[[0,1],[0,2],[1,2],[0,1]]]}})

var eastVillage={"type":"Polygon","coordinates":[[-73.9917900,40.7264100],[-73.9917900,40.7321400],[-73.9829300,40.7321400],[-73.9917900,40.7264100]]}

参考文档如下:

http://stackoverflow.com/questions/25893415/mongodbcant-canonicalize-query-badvalue-bad-geo-query

http://geojson.org/geojson-spec.html#id4

时间: 2024-11-06 07:26:01

mongodb的地理空间索引常见的问题的相关文章

mongodb的地理空间索引如何在solr中体现

"$near"是唯一一个会对查询结果进行自动排序的地理空间操作符 "$near"的返回结果是按照距离由近及远排序的.其他排序条件不会生效. 这种按照地理位置远近查询怎么在solr排序中体现?

MongoDB 学习笔记之 地理空间索引入门

地理空间索引: 地理空间索引,可用于处理基于地理位置的查询. Point:用于指定所在的具体位置,我们以restaurants为例: db.restaurants.insert({name: "Citi", loc: {type: "Point", coordinates: [52.37, 5.21]}}) db.restaurants.insert({name: "SAP", loc: {type: "Point", coo

mongoDb地理空间索引和查询

一.MongoDb介绍(http://docs.mongoing.com/manual/applications/geospatial-indexes.html) MongoDB提供了一系列的索引和查询机制来处理地理空间信息.这一节会介绍MongoDB的地理索引特性.您可以阅读 地理索引教程 来了解关于MongoDB中地理查询的完整示例. 表面 在您存储地理数据和编写查询条件前,首先,您必须选择表面类型,这将被用在计算中.您所选择的类型将会影响您的数据如何被存储,建立的索引的类型,以及您的查询的

Mongodb地理空间索引

1. LBS地理空间索引 关于LBS相关项目,一般存储每一个地点的经纬度的坐标, 假设要查询附近的场所,则须要建立索引来提升查询效率. Mongodb专门针对这样的查询建立了地理空间索引. 2d和2dsphere索引. 2. 创建索引 建立places集合,来存放地点, loc字段用来存放地区数据GeoJSON Point. db.places.insert( { loc : { type: "Point", coordinates: [ -73.97, 40.77 ] }, name

MongoDB系列五(地理空间索引与查询).

一.经纬度表示方式 MongoDB 中对经纬度的存储有着自己的一套规范(主要是为了可以在该字段上建立地理空间索引).包括两种方式,分别是 Legacy Coordinate Pairs (这个词实在不知道怎么翻译...) 和  GeoJSON . Legacy Coordinate Pairs Legacy Coordinate Pairs 又有两种方式可以存储经纬度,可以使用数组(首选)或嵌入式文档. 数组: <field>: [<longitude>, <latitude

基于mongodb的地理检索实现

使用mongoDB不是很多,记得以前做"家长助手"的时候,使用过一点.只是在去年做"派单系统"的时候,又再一次使用mongoDB. 在这里先简单介绍一下派单系统,派单系统在云足疗(O2O,上门足疗)里一个专门负责订单派送,提高订单完成效率的一个系统.主要是当一个来了之后,会根据订单的服务项目.服务时间和服务地点,快速找到最合适最优秀的技师,返回给用户.由于上门足疗特殊行业的要求,不能给订单指定技师直接下单.而是将筛选的一些优秀的技师返回给用户,让用户自己去选择指派给

每天200亿次查询 – MongoDB在奇虎360【转】

100多个应用,1,500多个实例,每天200亿次查询 奇虎是中国最大的安卓移动发布平台.奇虎也是中国最顶尖的病毒软件防护公司,同时为网络以及移动平台提供产品.自从2011年成为MongoDB的用户之后,奇虎已经在MongoDB上构建了100多个不同的应用,其中包括新服务以及从MySQL和Redis上迁移过来的服务——每天都会在MongoDB上运行超过1, 500个实例并且支持200亿次查询. 我很高兴能够有一个机会与奇虎的高级DBA——杨艳杰进行交流,了解更多关于他们使用MongoDB的过程及

MongoDB的地埋空间数据存储、空间索引以及空间查询

一.关于MongoDB 在众多NoSQL数据库,MongoDB是一个优秀的产品.其官方介绍如下: MongoDB (from "humongous") is a scalable, high-performance, open source, document-oriented database. 看起来,十分诱人!值得说明的是,MongoDB的document是以BSON(Binary JSON)格式存储的,完全支持Schema Free.这对地理空间数据是十分友好的.因为有著名的G

MongoDB数据库索引

前面的话 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的.本文将详细介绍MongoDB数据库索引 引入 索引能够提高查询效率,如何体现呢?接下来使用性能分析函数explain()来进行分析说明 首先,插入10万条数据 接着,不创建索引,来寻找time范围在100和200之间的文档 由图中所知,tot