$nearSphere(球面距离查询)
最后更新:2026-10-09
$nearSphere(球面距离查询)
$nearSphere 按球面距离(地球曲面上的大圆距离)从近到远返回地理位置文档。`{ loc: { $nearSphere: { $geometry: { type: 'Point', coordinates: [lng, lat] }, $maxDistance: 5000 } } }`。与 $near 的区别:$nearSphere 始终按球面距离计算且单位为米;$near 在 2d 索引下用平面距离。需 2dsphere 索引。
| 分类 | 地理空间 |
|---|---|
| MongoDB 版本 | 2.4+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <位置字段>: { $nearSphere: { $geometry: <Point>, $maxDistance: <米> } } }
⚙️ 参数
| 位置字段 | 存储坐标的字段名。 |
|---|---|
| Point几何 | GeoJSON Point,坐标为 [经度, 纬度]。 |
| maxDistance | 可选,最大球面距离(米)。 |
返回值:匹配的文档游标(按球面距离升序)
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $nearSphere:5 公里内的门店(球面距离)
// 经纬度顺序为 [经度, 纬度]
db.stores.find({
loc: { $nearSphere: {
$geometry: { type: 'Point', coordinates: [-73.97, 40.75] },
$maxDistance: 5000
} }
})
运行结果:
// 返回 5 公里内的门店,按球面距离升序
📌 注意事项
- 始终按球面距离计算,适合全球范围的邻近查询
- 坐标顺序是 [经度, 纬度],写反会定位到错误位置
- 与 $near 二选一,不能同时出现
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$nearSphere 和 $near 的区别?
A$nearSphere 始终用球面距离(米);$near 在 2d 索引下用平面距离。
Q经纬度顺序是?
AGeoJSON 规定 [经度, 纬度],写反了会差十万八千里。
Q能同时用 $near 和 $nearSphere 吗?
A不能,同一查询只能出现其中一个。