Xos*_*fox 5 performance geolocation mongodb
据我从阅读 mongodb 文档以及使用索引、查询和监控结果中了解到,我对 mongodb 中地理位置查询工作方式的理解如下:
number_limit
或distance_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 部分之前减少要检查的文档数量。