据我所知,阅读mongodb文档并使用索引,查询和监控结果,我对mongodb中地理位置查询方式的理解如下:
number_limit
或distance_limit
显示我们要做的事情:让我们以mongodb教程示例为基础:https://docs.mongodb.com/manual/tutorial/geospatial-tutorial/
我们假设我们有一个餐馆列表,其中包含位置和更多信息,例如established_at
,type
(中文,泰文,意大利文,...),priceOfACoke
, numberOfWaiters
,wheelchairAccess
,...
假设您想要查询A的美国所有餐厅的集合,以便返回所有意大利餐馆,这些餐厅靠近匹兹堡市中心,这些餐厅是在2 - 5年前建立的,有wheelChair访问权限和超过50名服务员,可乐比1美元便宜。
这是一个具有限制性附加条件且没有距离限制的地理查询;而且由于“服务员> 50比1美元便宜的可乐”过滤了大部分/全部结果,这个查询似乎贯穿整个集合并且需要很长时间。
如果没有“geoNear”运行,假设存在相关字段的组合索引,则此查询非常快,即使100万个文档中只有10个结果。
然而,只要geoNear
发挥作用,表现就会很糟糕
根据我的理解,每个集合只能有一个地理索引,地理索引中只有一个额外的属性,所以没有太多办法可以帮助mongodb找到几个标准的结果,因为传统索引似乎没有要使用的。 此外,使用聚合时,geo必须是第一个过滤器......
是否有任何提示或指示来加速这样的查询?
如果可能的话,我不希望得到“使用ElasticSearch”或“使用多个集合”的响应 - 我仍然希望有另一种方法来帮助mongodb在开始执行geoNear部分之前减少要检查的文档数量。 / p>