以下是我的数据的简化版本:
> 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 ] }
非常感谢任何建议或资源。
答案 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