MongoDB:A指B。获取A满足B满足某些条件的

时间:2019-07-23 11:47:57

标签: database mongodb query-optimization query-performance

设置

我们有两个集合:

  • 地图::每个文档都有一个_id和坐标字段。坐标字段是代表路线的GeoJSON LineString。 我们大约有20万张地图

  • 网段::每个文档均包含有关路线的详细信息(海拔,运动员人数等),并具有一个地图字段,其中包含某个地图的_id。 我们大约有23万个网段(其中一些不被忽略)。 地图和线段之间的关系是一对一的关系。

用例

我们的服务器收到的查询指定:

  • GeoJSON格式的视图/矩形边界
  • 其他过滤器,例如运动员人数范围等

当前解决方案

现在我们的流程如下:

  1. 获取所有点位于矩形范围内的所有地图 查询看起来像这样:
   {
          coordinates: {
              $geoIntersects: {
                  $geometry: {
                    type: "Polygon",
                    coordinates: [bounds],
                  }
              },
            }
   }
  1. 获取满足此约束的地图_id的数组
  2. 获取包含这些_id的ID的细分:
    {
         map: { $in: mapIds }
    }
  1. 直接在服务器上填充其地图字段

问题

问题是我们的查询太慢。 我们的馆藏已正确索引。我们在地图的坐标字段上建立了2dsphere索引 瓶颈似乎在步骤3)中。 mapIds数组可能太大,数据库可能进行了太多比较。

问题

有没有办法(也许我们可以使用其他运算符)来提高查询效率?

我什至不确定该查询属于哪种类型,但是如果条件允许,它不是某种形式的反向填充,条件不是位于填充的而是填充的。

我当时想也许可以在$ lookup中使用聚合操作,但是我不确定如何使用它。

欢迎任何帮助。

0 个答案:

没有答案