查询2d
索引
以下部分介绍了2d
索引支持的查询。
平面上定义的形状内的点
要选择在平面上给定形状内找到的所有legacy coordinate pairs ,请将 $geoWithin
操作符与形状操作符结合使用。 使用以下语法:
db.<collection>.find( { <location field> : { $geoWithin : { $box|$polygon|$center : <coordinates> } } } )
以下查询用于查找由左下角的[ 0
, 0 ]
和右上角的[ 100 , 100 ]
定义的矩形内的文档。
db.places.find( { loc : { $geoWithin : { $box : [ [ 0 , 0 ] , [ 100 , 100 ] ] } } } )
以下查询针对以[ -74 , 40.74 ]
为中心、半径为10
的圆内的文档:
db.places.find( { loc: { $geoWithin : { $center : [ [-74, 40.74 ] , 10 ] } } } )
有关每种形状的语法和示例,请参阅以下内容:
球体上定义的圆内的点
由于历史遗留原因,MongoDB 支持对平面2d
索引进行基本的球面查询。 一般来说,球面计算应使用2dsphere
索引,如2dsphere
索引中所述。
要查询旧版坐标对在球体上“球盖”中,请将 { $geoWithin
与$centerSphere
操作符结合使用。指定一个包含以下内容的数组:
圆中心点的网格坐标
以弧度为单位测量的圆的半径。 要计算弧度,请参阅使用球面几何图形计算距离。
使用以下语法:
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
以下示例查询返回经度88 W
和纬度30 N
的 10 英里半径内的所有文档。 该示例通过将距离除以近似地球赤道半径 3963.2 英里,将距离转换为弧度:
db.<collection>.find( { loc : { $geoWithin : { $centerSphere : [ [ 88 , 30 ] , 10 / 3963.2 ] } } } )
平面上某一点的邻近度
邻近查询返回距离点最近的legacy coordinate pairs,并按距离对结果进行排序。使用$near
操作符。 该操作符需要2d
索引。
$near
操作符使用以下语法:
db.<collection>.find( { <location field> : { $near : [ <x> , <y> ] } } )
有关示例,请参阅$near
。
在平面上进行精确匹配
不能使用2d
索引返回坐标对的精确匹配项。 在存储坐标的字段上使用标量(升序或降序)索引以返回精确匹配项。
在以下示例中,如果有{
'loc': 1}
索引,则find()
操作将返回位置的精确匹配项:
db.<collection>.find( { loc: [ <x> , <y> ] } )
此查询将返回值为[ <x> , <y> ]
的所有文档。