当前位置:   article > 正文

mongodb之地理空间索引_mongodb地理索引

mongodb地理索引

MongoDB 对于坐标数据的文档提供了地理空间索引。使用该索引,可以通过坐标高效地查询到对应文档。下面介绍地理空间索引的两种类型。
 

(1) 2dsphere :此索引类型支持查询地球球体上的位置,支持"GEOJSON"和专统坐标类型
的数据。
* GeoJSON数据:需要使用嵌入式文档。在其中可以通过“coordinates”字段来指定坐标位置,以及可以通过“type”字段来指定坐标的类型。type可以分3中形式

点(Point):若“type”为“Point”,则“coordinates”字段只有一个坐标

线(LineString):若“type”为“LineString”,则“coordinates”字段会有两个坐标

多边形(Polygon):若“type”为“Polygon”,则“coordinates”字段会有两个以上的坐标

* 传统坐标数据:只需要一个字段指定坐标的位置

无论是GeoJSON 数据还是传统坐标数据,真中经纬度的存储方式必须是数组形式,即[经度,纬度],且经纬度必须有效,如果经纬度的存储位置颠倒,或者无效,创建时会报错

(2) 2d:此索引类型支持查询二维平面上的位置,仅支持传统坐标类型的数据。

1. 创建空间地理索引

范例1 

在GeoJSON类型的文档中使用2dsphere 类型的索引

(1)首先创建一个GeoJSON类型的文档。

  1. db.getCollection("Warehouse").insert({
  2. SysNo: 1001,
  3. name: "东软",
  4. address: "沈 阳市浑南区新秀街(东软软件园)",
  5. location: {
  6. type: "Point",
  7. coordinates: [123.436716, 41.706877]
  8. }
  9. })

(2)创建2dsphere的地理空间索引

db.Warehouse.createIndex({location:"2dsphere"})

范例2

在传统坐标类型的数据中使用“2d”类型的索引。

(1)创建一个符合传统坐标类型格式的文档

  1. db.getCollection("Warehouse_2").insert({
  2. SysNo: 1021,
  3. name: "东软",
  4. address: "沈 阳市浑南区新秀街(东软软件园)",
  5. coordinates: [123.436716, 41.706877]
  6. })

(2)创建“2d”地理空间索引

db.Warehouse_2.createIndex({"coordinates":"2d"});

2.使用“$geoNear”操作符查询文档

在索引创建完成后,用“ $geoNear”操作符可以把指定坐标到文档中坐标的距离由近到远地排列出
来, 并设定“distanceField”参数显示两者之间的距离。其中需注意的是,从MongoDB4.0 版本开始,用“ $geoNear”操作符并设定“ key”参数,就可以查询集合中同时拥有“ 2dsphere”及“2d”的地
理空间索引的文挡。

范例1

$geoNear查询2dsphere类型的文档

(1)使用之前在“ location”字段上建立的2dsphere索引,查询指定坐标[123.450991,41.717795]与文挡之间的距离,并按照距离由近到远地呈现,具体指令如下。

  1. db.Warehouse.aggregate(
  2. [{
  3. $geoNear: {
  4. near: {
  5. type: "Point",
  6. coordinates: [123.450991, 41.717795]
  7. },
  8. distanceField: "dist.location",
  9. key: "location"
  10. }
  11. }
  12. ]
  13. )

(2)查询结果如下,dist是指定坐标与文档中坐标的距离

 

范例2

$geoNear查询2d类型的文档

(1)用在“coordinates”字段上建立的2d索引的文档,查询指定坐标[123.450991,41.717795]与文挡之间的距离,并按照距离由近到远地呈现,具体指令如下。

  1. db.Warehouse_2.aggregate(
  2. [{
  3. $geoNear: {
  4. near: [123.450991, 41.717795]
  5. ,
  6. distanceField: "dist.location",
  7. key: "coordinates"
  8. }
  9. }]
  10. )

(2)结果如下

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/504041
推荐阅读
相关标签
  

闽ICP备14008679号