此版本的文档已存档,不再提供支持。要升级6.0部署,请参阅 MongoDB 7.0升级程序。
警告
对于球面查询,请使用 2dsphere索引结果。
使用2d索引进行球面查询可能会导致不正确的结果,例如使用2d索引进行环绕极点的球面查询。
2d索引支持计算欧几里得平面(平面)上距离的查询。 该索引还支持以下使用球面几何计算距离的查询运算符和命令:
注意
虽然2d索引支持使用球面距离的基本查询,但如果数据主要是经度和纬度,请考虑改用2dsphere索引。
具有
spherical: true选项的$geoNear管道阶段
重要
上述操作使用弧度表示距离。 其他球面查询运算符则不然,例如$geoWithin 。
为了使球面查询运算符正常运行,必须将距离转换为弧度,然后将弧度转换为应用程序使用的距离单位。
要转换:
弧度距离:将距离除以球体(例如地球)的半径,其单位与距离测量值相同。
弧度转距离:将弧度测量值乘以球体(例如地球)半径(采用要转换距离的单位制)。
地球赤道半径约为3,963.2英里或6,378.1公里。
以下查询将返回以[ -74, 40.74 ]为圆心、半径为100英里的圆内的places集合中的文档:
db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -74, 40.74 ] , 100 / 3963.2 ] } } } )
注意
重要
如果指定纬度和经度坐标,则先列出经度,然后列出纬度。
有效经度值介于
-180和180之间,两者均包括在内。有效纬度值介于
-90和90之间,两者均包括在内。