MST

星途 面试题库

面试题:MongoDB地理空间查询之基本索引应用

在MongoDB中,假设有一个集合存储了城市的位置信息(以GeoJSON格式的坐标点存储),现在需要查询距离某个给定坐标点100公里范围内的所有城市。请写出实现此查询的代码,并说明如何为该查询创建合适的地理空间索引。
14.0万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

代码实现查询

假设集合名为cities,给定坐标点为[longitude, latitude],以下是使用Node.js的MongoDB驱动实现该查询的代码示例:

const { MongoClient } = require('mongodb');

// 连接到MongoDB
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function findNearbyCities() {
    try {
        await client.connect();
        const db = client.db('yourDatabaseName');
        const cities = db.collection('cities');

        const givenCoordinates = [longitude, latitude];
        const maxDistance = 100 * 1000; // 100公里转换为米

        const result = await cities.find({
            location: {
                $near: {
                    $geometry: {
                        type: "Point",
                        coordinates: givenCoordinates
                    },
                    $maxDistance: maxDistance
                }
            }
        }).toArray();

        console.log(result);
    } finally {
        await client.close();
    }
}

findNearbyCities();

创建地理空间索引

为了优化上述查询,需要在location字段上创建地理空间索引。在MongoDB shell中,可以使用以下命令创建索引:

db.cities.createIndex({ location: "2dsphere" });

这里使用2dsphere索引类型,适用于基于球面几何的地理空间查询,非常适合处理地球表面上的坐标点。这样创建索引后,查询距离某个坐标点一定范围内的文档时性能会得到显著提升。