$near(按距离查询并排序)
最后更新:2026-10-09
$near(按距离查询并排序)
$near 按与指定点的距离从近到远返回地理位置文档,结果自动按距离升序。`{ loc: { $near: { $geometry: { type: 'Point', coordinates: [lng, lat] }, $maxDistance: 1000 } } }`。必须使用 2dsphere 或 2d 索引,同一查询不能与其他 $near 或 $nearSphere 组合。
| 分类 | 地理空间 |
|---|---|
| MongoDB 版本 | 2.4+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <位置字段>: { $near: { $geometry: <Point>, $maxDistance: <米> } } }
⚙️ 参数
| 位置字段 | 存储坐标的字段名。 |
|---|---|
| Point几何 | GeoJSON Point,坐标为 [经度, 纬度]。 |
| maxDistance | 可选,最大距离(米)。 |
返回值:匹配的文档游标(按距离升序)
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $near:找离坐标 1000 米内的门店
// 需要 2dsphere 索引
db.stores.find({
loc: { $near: {
$geometry: { type: 'Point', coordinates: [-73.97, 40.75] },
$maxDistance: 1000
} }
})
运行结果:
// 返回 1000 米内的门店,按距离从近到远排序
📌 注意事项
- 结果自动按距离升序,无需 sort
- 必须建 2dsphere(GeoJSON)或 2d(坐标对)索引
- $maxDistance 单位是米(GeoJSON 场景)
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$near 结果自带排序吗?
A自带,按距离从近到远,无需再 sort。
Q$near 必须建索引吗?
A必须,2dsphere 或 2d 索引,否则报错。
Q$near 和 $geoWithin 怎么选?
A需要距离排序选 $near;只要判断在区域内选 $geoWithin。