在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
]
}
}
我做错了什么?
答案 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格式不适用。