需要有2d和2dsphere索引,但不能创建这两个索引。为什么?

时间:2015-06-30 06:20:42

标签: mongodb spring-data-mongodb

在MongoDB地理数据查询的单元测试期间,我收到以下错误消息:

  

无法找到任何特殊索引:2d(需要索引),2dsphere(需要索引),for:{address.location:{$ nearSphere:{x:-120.0,y:47.0},$ maxDistance: 0.01567855942887398},状态:" INIT" };嵌套异常是com.mongodb.MongoException:找不到任何特殊索引:2d(需要索引),2dsphere(需要索引),for:{address.location:{$ nearSphere:{x:-120.0,y: 47.0},$ maxDistance:0.01567855942887398},状态:" INIT" }

运行createIndex命令后,我得到以下错误:

  

db.store.createIndex({" address.location":" 2D"})   期望的位置对象,位置数组格式不正确   db.store.createIndex({" address.location":" 2dsphere"})   无法从对象,格式错误的几何图形中提取地理位置键?:{type:" Point&#34 ;, coordinates:[47.399465,-122.2950165]}

文件数据的结构如下:

{
 ....
       "address" : {
           "street" : "Street One",
           "city" : "One City",
           "province" : "aProvince",
           "country" : "aCountry",
           "postalCode" : "91202",
           "location" : {
                   "type" : "Point",
                   "coordinates" : [
                           47.5891279,
                           -122.0446183
                   ]
           }
   }

我做错了什么?

1 个答案:

答案 0 :(得分:3)

看起来你的“经度”和“纬度”是相反的顺序,而错误应该告诉你一个井(至少它在3.x系列中)。你有“纬度”和“经度”,所以反过来:

{
   "address" : {
       "street" : "Street One",
       "city" : "One City",
       "province" : "aProvince",
       "country" : "aCountry",
       "postalCode" : "91202",
       "location" : {
           "type" : "Point",
           "coordinates" : [
               -122.0446183,
               47.5891279
           ]
       }
    }
}

索引创建没有错误:

db.store.ensureIndex({ "address.location": "2dsphere" })

这是"2dsphere"索引。无法在"2d"对象上创建GeoJSON索引,因此您只能直接使用“坐标”:

db.store.ensureIndex({ "address.location.coordinates": "2d" })

它是“平面的”,因此GeoJSON格式不适用。