我们有两个集合:
地图::每个文档都有一个_id和坐标字段。坐标字段是代表路线的GeoJSON LineString。 我们大约有20万张地图
网段::每个文档均包含有关路线的详细信息(海拔,运动员人数等),并具有一个地图字段,其中包含某个地图的_id。 我们大约有23万个网段(其中一些不被忽略)。 地图和线段之间的关系是一对一的关系。
我们的服务器收到的查询指定:
现在我们的流程如下:
{
coordinates: {
$geoIntersects: {
$geometry: {
type: "Polygon",
coordinates: [bounds],
}
},
}
}
{
map: { $in: mapIds }
}
问题是我们的查询太慢。 我们的馆藏已正确索引。我们在地图的坐标字段上建立了2dsphere索引 瓶颈似乎在步骤3)中。 mapIds数组可能太大,数据库可能进行了太多比较。
有没有办法(也许我们可以使用其他运算符)来提高查询效率?
我什至不确定该查询属于哪种类型,但是如果条件允许,它不是某种形式的反向填充,条件不是位于填充的而是填充的。
我当时想也许可以在$ lookup中使用聚合操作,但是我不确定如何使用它。
欢迎任何帮助。