Docs 菜单
Docs 主页
/
数据库手册
/ / / / /

查询平面上形状内的位置

要查询平面上指定形状内的位置数据,请使用 $geoWithin操作符。 要将$geoWithin与出现在平面上的数据一起使用,请使用以下语法:

db.<collection>.find( {
<location field> : {
$geoWithin : {
<shape operator> : <coordinates>
}
}
} )

将以下值替换为您的查询:

字段
说明

<collection>

要查询的collection。

<location field>

包含位置数据的字段。对于平面上的查询,数据必须存储为legacy coordinate pairs。

<shape operator>

要在其中进行查询的形状。 您可以指定以下形状之一:

  • $box

  • $polygon

  • $center (定义一个圆)

本页上的示例使用$box操作符。 要查看使用其他形状的查询示例,请参阅这些操作符页面。

<coordinates>

定义要在其中进行查询的形状边缘的坐标。 与$box操作符一起使用时,坐标表示矩形的左下角和右上角。

在您指定经度和纬度坐标时,请先列出经度,然后再列出纬度

  • 有效经度值介于 -180180 之间,两者均包括在内。

  • 有效纬度值介于 -9090 之间,两者均包括在内。

$geoWithin 不需要地理空间索引。 但是,地理空间索引可提高查询性能。

创建 contacts 集合:

db.contacts.insertMany( [
{
name: "Evander Otylia",
phone: "202-555-0193",
address: [ 55.5, 42.3 ]
},
{
name: "Georgine Lestaw",
phone: "714-555-0107",
address: [ -74, 44.74 ]
}
] )

address 字段包含传统坐标对

使用$geoWithin查询contactscollection。以下$geoWithin查询使用$box操作符返回出现在指定矩形内的文档:

db.contacts.find( {
address: {
$geoWithin: {
$box: [ [ 49, 40 ], [ 60, 60 ] ]
}
}
} )

输出:

[
{
_id: ObjectId("647e4e496cdaf4dc323ec92a"),
name: 'Evander Otylia',
phone: '202-555-0193',
address: [ 55.5, 42.3 ]
}
]

$box操作符的值表示要在其中进行查询的矩形的左下角和右上角。

前面显示的$geoWithin查询返回位于具有以下顶点的矩形内的文档:

  • [ 49, 40 ]

  • [ 49, 60 ]

  • [ 60, 60 ]

  • [ 60, 40 ]

要了解如何将$geoWithin操作符用于其他形状,请参阅以下页面:

后退

曲面上的点

在此页面上