面试题答案
一键面试代码实现查询
假设集合名为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
索引类型,适用于基于球面几何的地理空间查询,非常适合处理地球表面上的坐标点。这样创建索引后,查询距离某个坐标点一定范围内的文档时性能会得到显著提升。