MST

星途 面试题库

面试题:MongoDB 2d索引在地理位置查询中的使用

在MongoDB中,假设有一个集合存储了城市的经纬度信息,每个文档格式为{name: '城市名', location: [经度, 纬度]},请描述如何创建2d索引以便高效查询距离某个给定经纬度点100公里内的城市,并写出对应的查询语句。
12.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 创建2d索引: 在MongoDB的mongo shell中,可以使用以下命令为location字段创建2d索引:
    db.城市集合名.createIndex({location: "2d"});
    
    这里城市集合名需要替换为实际存储城市经纬度信息的集合名称。
  2. 查询距离某个给定经纬度点100公里内的城市: 假设给定的经纬度点为[longitude, latitude],100公里转换为弧度(MongoDB查询距离时使用弧度),1公里约等于0.015708弧度,100公里就是100 * 0.015708 = 1.5708弧度。
    var longitude = 给定经度值;
    var latitude = 给定纬度值;
    var distanceInRadians = 1.5708;
    db.城市集合名.find({
        location: {
            $near: {
                $geometry: {
                    type: "Point",
                    coordinates: [longitude, latitude]
                },
                $maxDistance: distanceInRadians
            }
        }
    });
    
    同样,这里城市集合名需要替换为实际的集合名称,给定经度值给定纬度值替换为具体的经纬度数值。