【问题标题】:MongoDB geospatial index on an array (multikey + geospatial)数组上的 MongoDB 地理空间索引(多键 + 地理空间)
【发布时间】:2011-04-06 17:12:52
【问题描述】:

这是我的数据的简化版本:

> 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 ] }

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

【问题讨论】:

    标签: mongodb gis geospatial database nosql


    【解决方案1】:

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

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

    数组:

      [40.889248, -73.898583]
    

    文档:

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

    【讨论】:

      【解决方案2】:

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

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

      并且 ensureIndex 看起来像这样

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

      【讨论】:

      • 这似乎不允许通过一个元素位置数组进行查询以查找长度为三个元素的任何内容等。我认为这种方法使用多键索引是否正确?
      猜你喜欢
      • 2019-11-30
      • 2016-02-12
      • 2011-04-22
      • 2017-01-25
      • 2016-10-02
      • 2011-10-23
      • 2014-01-04
      • 1970-01-01
      • 2012-02-02
      相关资源
      最近更新 更多