是否可以从两个圆的差异在结果区域中执行MongoDB中的地理空间搜索。假设我有一个半径为x的圆圈A和另一个半径为y的圆圈,其中y> 0。 X。我需要找到B-A内的所有点。这是否可以使用MongoDB。我知道MongoDB支持多边形搜索,但也许有更好的方法。请记住,我正在使用mongoid从rails应用程序中使用Mongo。
答案 0 :(得分:4)
是的,有可能。
使用$within
运算符。
http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-Querying
可以使用Bounds Queries
$ within而不是$ near来查找形状中的项目。结果不按距离排序,这可能导致在不需要此排序时更快的查询。支持$ box(矩形),$ center(圆圈)和$ polygon(凹凸多边形)类型的形状。所有边界查询都隐式包含形状边界作为边界的一部分,但由于浮点不准确,这不能严格依赖。
要查询矩形内的所有点,您必须指定左下角和右上角: 圆由中心点和半径指定:
center = [50,50] 半径= 10 db.places.find({“loc”:{“$ within”:{“$ center”:[center,radius]}}})
一种方法是你可以在两个圆圈内找到点,然后做一组的交集。 如果圆是同心的,或者如果不是同心但是有一些重叠的区域,这对两种情况都适用。