mongodb和地理空间模式

时间:2013-12-12 20:44:22

标签: mongodb geospatial

我用mongo和地理空间打破了我的头脑, 所以也许有人有一些想法或解决方案如何解决这个问题: 我的对象模式就像这个从http://geojson.org/geojson-spec.html获取的geoJSON样本。

{
"name":"name",
"geoJSON":{
"type":"FeatureCollection",
"features":[
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":{}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":{}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":{}}
]}}

附加信息:我正在使用弹簧数据,但这不应影响答案。 主要问题是如何/在何处将索引放在此架构中。如果某个多边形相交,我需要进行查询以查找给定Point的所有文档。

提前感谢。

1 个答案:

答案 0 :(得分:2)

通过在geoJSON.features.geometry上创建2d或2dsphere索引,您应该能够创建涵盖所有geoJSON对象的索引。

要获取features数组中至少有一个子对象覆盖某个点的所有文档,可以将$geoIntersects运算符与geoJSON Point一起使用:

db.yourcollection.find( 
            { `geoJSON.features.geometry` :
              { $geoIntersects :
                { $geometry :
                  { type : "Point" ,
                    coordinates: [ 100.5 , 0.5 ] 
                  } 
                } 
              } 
            } 
          )