我正在编写一个涉及存储在 mongodb 中的地理编码(约 5000 万个位置)的 nodejs 应用程序(使用 mongo 本机驱动程序)。对于开发,我正在使用样本数据进行测试(世界机场约 45k 个位置http://www.ourairports.com/data/airports.csv)。我遵循 GeoJSON 格式并在位置字段(名为“几何”)上构建 2dsphere 索引。然后我正在做一个 $geowithin 查询来查找位置。
一切都按预期工作。问题是,当我查询包含 US 的多边形时,查询需要大约 4-6 秒才能返回 22845 个位置。
db. airports.ensureIndex({ geometry: '2dsphere' })
db.airports.find({ geometry: { '$geoWithin': { '$geometry': { type: 'Polygon', coordinates: [ [ [ -127.32917843921399, 75.11297289119061 ], [ -71.32126356078601, 75.11297289119061 ], [ -71.32126356078601, 12.305525108809391 ], [ -127.32917843921399, 12.305525108809391 ], [ -127.32917843921399, 75.11297289119061 ] ] ] } } } })
我确信这不可能是正确的。这样我无法想象 5000 万点的响应时间。如果有人能指出我改进性能的方向,我将不胜感激。