MST

星途 面试题库

面试题:MongoDB地理空间索引的复杂查询应用

假设有一个MongoDB集合restaurants,其中每个文档代表一家餐厅,包含位置信息(2dsphere索引已构建在location字段上)。现在要求查询距离坐标[longitude, latitude] 10公里范围内且评分(rating字段)大于4的餐厅,写出对应的查询语句,并解释在这种查询中地理空间索引是如何优化性能的。
45.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

查询语句

db.restaurants.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: [longitude, latitude]
            },
            $maxDistance: 10000 // 10公里,单位为米
        }
    },
    rating: { $gt: 4 }
});

地理空间索引优化性能解释

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