查询语句
db.restaurants.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: 10000 // 10公里,单位为米
}
},
rating: { $gt: 4 }
});
地理空间索引优化性能解释
- 快速定位候选集:MongoDB的2dsphere索引允许数据库快速筛选出可能满足距离条件的文档。它将地理空间数据组织成树形结构(类似R-tree),使得在查找特定距离内的点时,能够通过高效的树遍历,跳过大部分不相关的数据,快速定位到可能包含目标文档的区域。这样就大幅减少了需要扫描的文档数量,提高查询效率。
- 距离计算优化:一旦通过索引筛选出候选文档,MongoDB可以利用索引结构中的空间信息,更高效地计算这些候选文档与目标点之间的实际距离。相较于全表扫描后再计算距离,这种方式减少了不必要的距离计算操作,进一步提高查询性能。
- 与其他条件的结合:在这个查询中,除了地理空间条件外,还有评分大于4的条件。地理空间索引筛选出的候选集规模较小,数据库再对这些候选文档检查评分条件时,所需处理的数据量也相应减少,从而提升了整个查询的性能。