查询平面上形状内的位置

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

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

将这些值替换为您的查询:

字段 描述
<collection> 要查询的集合。
<location field> 包含您的位置数据的字段。对于平面上的查询,您的数据必须存储为旧坐标对。
<shape operator> 要在其中查询的形状。您可以指定以下形状之一:$box$polygon$center(定义一个圆)本页上的示例使用$box运算符。要查看使用其他形状的查询示例,请参阅这些运算符页面。
<coordinates> 定义要在其中查询的形状边缘的坐标。与$box运算符一起使用时,坐标表示矩形的左下角和右上角。当您指定经度和纬度坐标时,请先列出 经度,然后列出纬度。有效的经度值介于-180和之间180(包含两者)。有效的纬度值介于-90和之间90(包含两者)。

关于此任务

$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集合。以下 $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其他形状使用该运算符,请参阅以下页面:

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""