2011-10-12 93 views
2

我有一个数据结构集合名称locations像:地理空间索引内部结构

{ 
    "_id" : ObjectId("4e95263f1783ae8487be26d4"), 
    "name" : "test 1", 
    "location" : { 
    "coordinate" : { 
     "latitude" : 40.731987, 
     "longitude" : -73.999701 
    }, 
    "address": "xxxxxxx" 
    } 
} 

,并希望进行地理查询,对location.coordinate场。

当我尝试添加索引,我得到以下结果:

$> db.locations.ensureIndex({ "location.coordinate" : "2d" }) 
$> **** SyntaxError: syntax error (shell):0 

是否可以使用地理空间索引这样的结构?

回答

4

因为MongoDB是基于GeoJSON格式,它能够更好地拥有经度元素第一

"location" : { 
    "coordinate" : {   
     "longitude" : -73.999701, 
     "latitude" : 40.731987 
    }, 

mongodb geospatial page,你可以看到,在多个地方

默认情况下,该指数假设您正在索引经度/纬度,因此 被配置为[-180..180)值范围。

的代码假定使用的是十进制度(经度,纬度 )顺序。这与用于GeoJSON规范的顺序相同。 使用(纬度,经度)会导致非常不正确的结果,但 通常是其他地方使用的排序,所以仔细检查是很好的做法。 完全忽略您分配给位置对象的名称(如果使用的是对象而不是 数组),则仅检测到排序。

+0

谢谢!它有帮助 –