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

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

> 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

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

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

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

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

    一.经纬度表示方式 MongoDB 中对经纬度的存储有着自己的一套规范(主要是为了可以在该字段上建立地理空间索引).包括两种方式,分别是 Legacy Coordinate Pairs (这个词实在不 ...

  3. 玩转mongodb(七):索引,速度的引领(全文索引、地理空间索引)

    本篇博文主要介绍MongoDB中一些常用的特殊索引类型,主要包括: 用于简单字符串搜索的全文本索引: 用于球体空间(2dsphere)和二维平面(2d)的地理空间索引. 一.全文索引 MongoDB有 ...

  4. MongoDB小结26 - 地理空间索引

    现在有一种查询变得越来越流行(尤其是移动设备):找到离当前位置最近的N个场所. MongoDB专为平面坐标查询做了专门的索引,称为地理空间索引. 同样需要用ensureIndex创建,不过,参数是两个 ...

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

    地理空间索引: 地理空间索引,可用于处理基于地理位置的查询. Point:用于指定所在的具体位置,我们以restaurants为例: db.restaurants.insert({name: &quo ...

  6. Mongodb地理空间索引

    1.索引: 建立索引既耗时也费力,还需要消耗很多资源.使用{"bakckground":true}选项可以使这个过程在后台完成,同时正常处理请求.如果不包括background 这 ...

  7. 全文索引&&地理空间索引

    Ⅰ.全文索引 搜索引擎的实现核心技术,搜索类似where col like '%xxx%';关键字可以出现再某个列任何位置 这种查询条件,B+ tree索引是无法使用的.如果col上创建了索引,因为排 ...

  8. MongoDB-JAVA-Driver 3.2版本常用代码全整理(4) - 地理空间索引

    MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别.例如用Document替换BasicDBObject.通过Builders类构建Bson替代直接输入$命令等 ...

  9. 利用Mongodb做地理空间查询

    MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 前言 在移动开发中,经常会用到定位的功能,例如美团.饿了么.猫眼电影等的app ...

随机推荐

  1. javascript 16/1/14随记

    1.想在一个事件或者函数之后,触发某个事件. var flag=false //定义一个全局变量 function aku(){ if(flag){ } } sizemousedown=functio ...

  2. Python学习笔记 :01概述

    Python基础 首先推荐学习Python基础的教程和书籍 视频教程推荐南京大学张莉老师在cousera上的教程用Python玩转数据 入门教程<Python基础教程> 数据挖掘教程< ...

  3. Python学习6.1_函数参数及参数传递

    大多数编程语言都绕不开一个名词,那就是--函数(function).而函数很重要的部分则是参数(arguments)的使用.Python的参数传递总体来说是根据位置,传递对应的参数.阐述如下: 1.位 ...

  4. MySQL重置root密码的几种方法(windows+Linux)

    重置root密码的方法: windows系统下:1.停止mysql服务:2.新建文件init-root.txt,写上如下内容: update mysql.user set password = pas ...

  5. 【技术贴】xp下改变7zip默认关联图标和美化教程

    今天发现7z被还原成了复古样式,就是那种win2000的图标,感觉果然是技术人员做的美工. 于是开始想办法替换掉,自己找到了一个最简单的办法 首先,默认用7z打开 1.随便找到一个7z后缀,然后右键, ...

  6. 点击itemView选中checkbox

    在Listview中如果item中含有checkbox会使itemview的setonitemchecklistingner失效,我们可以通过设置checkbox的clickbale的值为false来 ...

  7. MFC自定义消息

    本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/ 消息机制是windows的典型运行机制,在MFC中 ...

  8. 【动态规划】XMU 1032 装配线问题

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1032 题目大意: 一个物品在2条生产线上加工,每条线上n(n<=1000)个节点 ...

  9. File System Minifilter Drivers(文件系统微型过滤驱动)入门

    问题: 公司之前有一套文件过滤驱动,但是在实施过程中经常出现问题,现在交由我维护.于是在边看代码的过程中,一边查看官方资料,进行整理. 这套文件过滤驱动的目的只要是根据应用层下发的策略来控制对某些特定 ...

  10. Going Home - poj 2195(最小费用流 | 二分匹配)

    题目大意:在一个网格里面有n个小男人和n个房子,现在想让每个小男人都有一个房子住,不过每个人移动一下都需要花费¥1,现在求出来最小的总花费.ps:可以认为网格的每个点都是很大的广场并且容纳所有的人,人 ...