Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

查询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 ]
} } } )

有关每种形状的语法和示例,请参阅以下内容:

  • $box

  • $polygon

  • $center (定义一个圆)

由于历史遗留原因,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> ]的所有文档。

后退

创建 2d 索引