阵列上的MongoDB地理空间索引(多键+地理空间)

时间:2011-04-06 17:12:53

标签: mongodb gis geospatial database nosql

以下是我的数据的简化版本:

> db.foo.insert({"name" : "jim",  "locations" : [[10,10],[3,6],[1,2]]})
> db.foo.insert({"name" : "john",  "locations" : [[1,5],[2,4]]})

我希望能够做到像

这样的事情
> db.foo.find( { locations : { $near : [5,5] } } )

有没有办法在数组上创建地理空间索引?这样做的:

> db.foo.ensureIndex({locations: "2d"}) 

给出以下错误:

geo values have to be numbers: { 0: [ 1.0, 5.0 ], 1: [ 2.0, 4.0 ] }

非常感谢任何建议或资源。

2 个答案:

答案 0 :(得分:3)

目前,MongoDB的地理空间索引仅支持2个坐标索引;每个集合只能有一个地理空间索引。

它们必须是两个数值的数组,或者是两个数值的文档。

阵列:

  [40.889248, -73.898583]

文件:

{ "lat" : 40.889248, "lon" : -73.898583 }

答案 1 :(得分:1)

我遇到了类似的问题,我的解决方案是将位置存储在单独的位置对象中并使用多键索引。在这种情况下执行此操作,您的文档可能如下所示:

{"name" : "jim",  "locations" : [{"location": [10, 10]}, {"location": [3, 6]}, {"location": [1, 2]}]}

并且ensureIndex看起来像这样

db.foo.ensureIndex({"locations.location": "2d"}) // could also use 2dsphere