我有一个集合名称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
是否可以将地理空间索引用于此类结构?
答案 0 :(得分:4)
由于mongodb基于GeoJSON格式,因此最好先使用经度元素
"location" : {
"coordinate" : {
"longitude" : -73.999701,
"latitude" : 40.731987
},
在mongodb geospatial page中,您可以在多个地方看到
默认情况下,索引假设您正在索引经度/纬度和 因此配置为[-180..180]值范围。
和
代码假定您使用的是十进制度数(经度, 纬度)订单。这与GeoJSON规范使用的顺序相同。 使用(纬度,经度)会导致非常不正确的结果,但是 通常是其他地方使用的排序,所以仔细检查是好的。 分配给位置对象的名称(如果使用对象而不是 数组)被完全忽略,只检测到排序。