Return MongoDB 结果按几何分组

Return MongoDB results grouped by geometry

是否可以查询集合MongoDB和return按几何边界分组的结果?例如,我有一个地址集合,每个地址都有一个 lat/long 定义为 GeoJSON 点。我还有一个市议会选区的集合,每个选区都有一个定义其边界的 GeoJSON MultiPolygon 对象。有没有一种方法可以查询 wards 集合,以便在我的结果中填充一个显示每个区地址总数的字段?

相反,是否可以查询 addresses 集合并在我的结果中填充每个地址所在的选区?

我已经阅读了 geoSpatial 运算符、聚合框架和 mapReduce 功能,但我不太明白在这个特定实例中它们将如何结合在一起。

谢谢!

第一个问题,我使用了 $geoWithin 运算符。知道病房坐标,您可以使用 $geoWithin 构建地址集合查询,它与 multiPolygons 一起使用。

db.addresses.find(
{
   addressCoordinates: {
      $geoWithin: {
          $geometry: {
             type: "MultiPolygon" ,
             coordinates: [ /*ward coordinates*/ ]
          }
      }
   }
});

http://docs.mongodb.org/manual/reference/operator/query/geoWithin/#op._S_geoWithin


对于第二个问题,如果 wards 和 addresses 是两个独立的集合,彼此之间没有单向或双向引用,那么你说的是 table 联接,这在 mongoDB。我能想到的唯一方法是在您的代码中执行此操作,如果我错了请纠正我。

另一种解决方案是重组您的病房或地址收集架构,以便一个可以引用另一个。地址示例:

{
    "name": "Trafalgar square",
    "coordinates": [/*your coordinates*/],
    "ward": ObjectId("5fbd....") // ward's ObjectID
}

正如所指出的,听起来需要加入,但我们的朋友 mongo 不可能。然而,mongo 易于创建(和丢弃)tables/collections 非常适合制作适合最终查询目的的临时(或永久)olap 表。反对重组可能已经匹配初始业务案例的集合模式。查看 joining 2 collections as a start. you can use crap-reduce or mongo shell scripts to build those olap collections. both methods are slow and not intended for justintime analytics. i would also look at this post about 20x perf