我用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的所有文档。
提前感谢。
答案 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 ]
}
}
}
}
)