如何加速具有多个条件的 mongodb 地理查询?

Xos*_*fox 5 performance geolocation mongodb

地位:

据我从阅读 mongodb 文档以及使用索引、查询和监控结果中了解到,我对 mongodb 中地理位置查询工作方式的理解如下:

  • 从指定位置开始
  • 从近到远查看每个文件
  • 保留那些匹配的附加查询条件,直到达到number_limitdistance_limit

例子

为了展示我们正在尝试做的事情:让我们以 mongodb 教程示例为基础:https : //docs.mongodb.com/manual/tutorial/geospatial-tutorial/

假设我们有一个餐厅列表,上面有位置和更多信息,例如established_at, type(chinese, thai, italian, ...), priceOfACoke, numberOfWaiters, wheelchairAccess, ...

问题:

假设您要查询 A 的美国所有餐厅的集合,以返回所有 2-5 年前成立的靠近匹兹堡市中心的意大利餐厅,这些餐厅有轮椅通道和 50 多个服务员,其中一个可乐比1美元便宜。

这是一个带有限制性附加条件且没有距离限制的地理查询;并且由于“服务员> 50 比 1 美元便宜的可乐”过滤掉了大部分/所有结果,这个查询似乎贯穿整个集合并且需要很长时间。

如果在没有“geoNear”的情况下运行,假设有相关字段的组合索引,则此查询非常快,即使 100 万个文档中只有 10 个结果。

然而,一geoNear上场,表现就惨不忍睹

据我了解,每个集合只能有一个地理索引,并且地理索引中只能有一个附加属性,因此没有太多工作可以帮助 mongodb 找到具有多个标准的结果,因为似乎没有使用传统索引. 此外,在使用聚合时,geo 必须是第一个过滤器......

是否有任何提示或指示可以加快这样的查询速度?

如果可能,我不希望得到“使用 ElasticSearch”或“使用多个集合”的响应——我仍然希望有另一种方法可以帮助 mongodb 在开始执行 geoNear 部分之前减少要检查的文档数量。