查询平面上形状内的位置
要查询平面上指定形状内的位置数据,请使用 $geoWithin
操作符。 要将$geoWithin
与出现在平面上的数据一起使用,请使用以下语法:
db.<collection>.find( { <location field> : { $geoWithin : { <shape operator> : <coordinates> } } } )
将以下值替换为您的查询:
字段 | 说明 |
---|---|
| 要查询的collection。 |
| 包含位置数据的字段。对于平面上的查询,数据必须存储为legacy coordinate pairs。 |
| |
| 定义要在其中进行查询的形状边缘的坐标。 与 在您指定经度和纬度坐标时,请先列出经度,然后再列出纬度。
|
关于此任务
$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
查询contacts
collection。以下$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
操作符用于其他形状,请参阅以下页面:
要在多边形内查询,请参阅
$polygon
。要在圈子内进行查询,请参阅
$center
。