如何使用多个条件加速mongodb地理查询?

时间:2017-06-08 18:56:30

标签: mongodb performance geolocation

状态:

据我所知,阅读mongodb文档并使用索引,查询和监控结果,我对mongodb中地理位置查询方式的理解如下:

  • 从指定地点开始
  • 查看从近到远的每个文件
  • 保留那些符合其他查询条件的内容 直到达到number_limitdistance_limit

实施例

显示我们要做的事情:让我们以mongodb教程示例为基础:https://docs.mongodb.com/manual/tutorial/geospatial-tutorial/

我们假设我们有一个餐馆列表,其中包含位置和更多信息,例如established_attype(中文,泰文,意大利文,...),priceOfACokenumberOfWaiterswheelchairAccess,...

问题:

假设您想要查询A的美国所有餐厅的集合,以便返回所有意大利餐馆,这些餐厅靠近匹兹堡市中心,这些餐厅是在2 - 5年前建立的,有wheelChair访问权限和超过50名服务员,可乐比1美元便宜。

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

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

然而,只要geoNear发挥作用,表现就会很糟糕

根据我的理解,每个集合只能有一个地理索引,地理索引中只有一个额外的属性,所以没有太多办法可以帮助mongodb找到几个标准的结果,因为传统索引似乎没有要使用的。 此外,使用聚合时,geo必须是第一个过滤器......

是否有任何提示或指示来加速这样的查询?

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

0 个答案:

没有答案