要查询平面上指定形状内的位置数据,请使用 $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查询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操作符用于其他形状,请参阅以下页面:
要在多边形内查询,请参阅
$polygon。要在圈子内进行查询,请参阅
$center。