MST

星途 面试题库

面试题:MongoDB地理空间查询之中等难度

假设有一个存储了城市信息的MongoDB集合,每个文档包含城市名称、经纬度坐标。要求写出一个查询,找出距离坐标(116.3975, 39.9085) 200公里范围内的所有城市名称。请说明需要对集合进行什么预处理操作,以及对应的查询语句。
26.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

预处理操作

  1. 建立2dsphere索引:为了能够高效地进行地理空间查询,需要在经纬度坐标字段上建立2dsphere索引。假设文档中经纬度坐标存储在一个名为location的数组字段中(第一个元素为经度,第二个元素为纬度),在MongoDB中可以通过以下命令创建索引:
db.cityCollection.createIndex({ location: "2dsphere" });

查询语句

var center = [116.3975, 39.9085];
var distance = 200 * 1000; // 200公里转换为米
db.cityCollection.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: center
            },
            $maxDistance: distance
        }
    }
}, {name: 1, _id: 0});

上述查询语句中,$near操作符用于查找距离指定点一定范围内的文档。$geometry指定中心点的坐标,$maxDistance指定最大距离(单位为米)。投影部分{name: 1, _id: 0}表示只返回城市名称字段,不返回_id字段。