2

是否可以在 MongoDB 中根据两个圆的差异在结果区域中执行地理空间搜索。假设我有一个半径为 x 的圆 A 和另一个半径为 y 的圆 B,其中 y > x。我需要找到 B - A 内的所有点。这对 MongoDB 是否可行。我知道 MongoDB 支持多边形搜索,但也许有更好的方法。请记住,我在使用 mongoid 的 rails 应用程序中使用 Mongo。

4

1 回答 1

4

对的,这是可能的。使用$within运算符。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-Querying

边界查询

可以使用 $within 代替 $near 来查找形状内的项目。结果不按距离排序,当不需要这种排序时,这可能会导致更快的查询。支持 $box(矩形)、$center(圆形)和 $polygon(凹凸多边形)类型的形状。所有边界查询都隐含地包括形状的边界作为边界的一部分,尽管由于浮点不准确,这不能严格依赖。

要查询矩形内的所有点,必须指定左下角和右上角: 圆由中心点和半径指定:

center = [50, 50] 半径 = 10 db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

一种方法是您可以在两个圆内找到点,然后对集合进行交集。如果圆是同心的,或者不是同心但有一些重叠区域,这两种情况都适用。

于 2012-08-02T05:28:53.763 回答