mongodb检查点_mongoDB 地理索引 | MongoDB中文社区

本文介绍了如何使用MongoDB的2dsphere索引来执行高效的地理空间查询。通过示例展示了如何利用$geoWithin、$geoIntersects和$geoNear操作符寻找附近的饭店,探讨了平面与球面几何的区别,并解释了GeoJSON对象的不同类型。此外,还讨论了如何为数据创建2dsphere索引以提高查询性能。
摘要由CSDN通过智能技术生成

本文内容主要译自MongoDB官方文档。第一部分主要以一个简单的示例演示了如何使用MongoDB的2dsphere索引和相应的操作符来寻找附近的饭店,第二部分则主要介绍了GeoJSON对象的类型,及其代表的含义。

原文链接:小米的专栏

一个简单的示例:寻找附近的饭店

概述

MongoDB的地理空间索引可以帮助我们在包含地理空间形状和点集的结合上高效地执行空间查询。本章节将简单介绍地理空间索引的概念,然后展示$geoWithin、$geoIntersects 以及 $geoNear的使用。

为了展示地理空间功能的能力并且比较不同方法之间的区别,本章节将会指导大家如何写一系列为简单的地理空间应用的查询。

假定我们在设计一个移动应用来帮助用户寻找纽约的饭店。该应用必须:

使用 $geoIntersects 确定用户当前的邻近区域

使用 $geoWithin 显示在该邻近区域的饭店数目

使用 $nearSphere 找到距离用户一定距离范围内的饭店

本章节将使用 2dsphere 索引来查询球面几何上的数据。

平面和球面集合的差异

地理空间查询既可以使用平面几何,也可以使用球面几何,根据使用的查询和索引类型来决定。 2dsphere 索引只能支持球面几何,而 2d索引同时支持平面和球面几何。

然而,在 2dsphere索引上使用球面几何的查询将会更高效和准确,因此我们应该在地理空间字段上使用 2dsphere索引。

下面的表格展示了每个地理空间操作符将会使用什么类型的几何:

查询类型

几何类型

备注

$near(GeoJSON点,2dsphere索引)

球面

$near(传统坐标,2d索引)

平面

$nearSphere(GeoJSON点,2dsphere索引)

球面

$nearSphere(传统坐标,2d索引)

球面

使用GeoJSON点替换

$geoWithin:{$geometry:...}

球面

$geoWithin:{$box:...}

平面

$geoWithin:{$polygon:...}

平面

$geoWithin:{$center:...}

平面

$geoWithin:{$centerSphere:...}

球面

$geoIntersects

球面

$geoNear命令和 $geoNear聚合操作符在使用传统坐标时会以弧度进行操作,在使用GeoJSON点的时候则以米为单位进行操作。

变形

在一个地图上进行可视化时,由于映射三维空间的本质,球面几何将会变形,例如将地球映射到一个平面上。

例如,以经纬度点(0,0),(80,0),(80,80),(0,80)为例,下图展示了这个区域覆盖的范围:

e296de203a0dfe63c09ad986b9a1b0b7.png

查找饭店

准备活动

分别下载示例数据集:neighborhoods和restaurant。

wget https://raw.githubusercontent.com/mongodb/docs-assets/geospatial/neighborhoods.json

wget https://raw.githubusercontent.com/mongodb/docs-assets/geospatial/restaurants.json

它们分别包括了邻居和饭店的集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值