MongoDB CRUD操作:地理位置应用——通过地理空间查询查找餐厅
文章目录
MongoDB通过对地理空间建立索引,可以对包含地理空间形状和点的集合上高效地执行空间查询,这边文章介绍了地理空间索引的的基本概念,介绍了地理空间查询的常用方法,演示了
$geoWithin
、
$geoIntersects
和
$nearSphere
的使用。
这里以一个App为例,介绍如何来帮助用户查找纽约市的餐厅。App完成的功能有:
- 使用
$geoIntersects
查询用户的邻居 - 使用
$geoWithin
显示社区的餐厅数量 - 使用
$nearSphere
查找用户指定距离内的餐厅
本文将使用2dsphere索引来查询有关球面几何的数据。
地图的扭曲
由于三维球体(例如地球)投影到平面上的原因,在地图上可视化时,球面几何形状会出现一定程度的扭曲。例如,采用由经纬度点 (0,0)、(80,0)、(80,80)和(0,80) 定义的球形正方形的规范。下图描绘了该区域所覆盖的区域:
搜索餐厅
在进行后续的操作前,需要先准备一些数据,需要先下载邻居neighborhoods和餐厅restaurants的集合,并使用下面的命令将其导入数据库:
mongoimport restaurants.json -c=restaurants
mongoimport neighborhoods.json -c=neighborhoods
地理空间索引能在很大程度上提升$geoWithin
和$geoIntersects
的查询性能,下面使用mongosh在对两个集合2dsphere索引:
db.restaurants.createIndex({
location: "2dsphere" })
db.neighborhoods.createIndex({
geometry: "2dsphere" })
浏览数据
查看mongosh中新创建的restaurants
集合中的条目:
db.restaurants.findOne()
此查询返回下面的文档:
{
location: {
type: "Point",
coordinates</