MongoDB 数据操作(六)索引(5)地理信息索引
in SQL with 0 comment, Views is 40

MongoDB 数据操作(六)索引(5)地理信息索引

in SQL with 0 comment, Views is 40

上一篇:《MongoDB 数据操作(六)索引(4)全文索引》

地理信息查询分为两类:2D 平面查询2D Sphere 球面查询

在 2D 索引里面能保存的信息基本都是经纬度坐标

定义一个商铺集合

> db.shop.insert({"loc": [10, 10]});
> db.shop.insert({"loc": [11, 10]});
> db.shop.insert({"loc": [10, 11]});
> db.shop.insert({"loc": [11, 11]});
> db.shop.insert({"loc": [15, 20]});
> db.shop.insert({"loc": [100, 110]});
> db.shop.insert({"loc": [90, 90]});

为 shop 集合定义 2D 索引

> db.shop.createIndex({"loc": "2d"});

此时 shop 集合就可以实现坐标位置的查询了,而要进行查询有两种方式

查询距离我的坐标(11,11)最近的商铺

> db.shop.find({"loc": {"$near": [11, 11]}}).pretty();

1.png

以上查询会将数据集合里面的前 100 个点的信息全都返回

可以设置最大的查询范围

设置距离为 3 的查询范围

> db.shop.find({"loc": {"$near": [11, 11], "$maxDistance": 3}}).pretty();

2.png

需要注意的是,在 2D 索引里面虽然支持最大距离,但是不支持最小距离

但是可以设置一个查询的范围,使用 $geoWithin

查询矩形范围

> db.shop.find({"loc": 
      {"$geoWithin": 
          {"$box": [[9, 9], [11, 11]]}
      }
  }).pretty();

3.png

查询圆形范围

> db.shop.find({"loc":
      {"$geoWithin":
          {"$center": [[10, 10], 2]}
      }
  }).pretty();

4.png

在 MongoDB 数据库中,除了一些支持的操作函数之外,还有一个重要的命令:runCommand(),这个函数可以执行所有 MongoDB 命令

利用 runCommand() 实现信息查询

> db.runCommand({"geoNear": "shop", "near": [10, 10], "maxDistance": 5, "num": 2});

5.png

这类的命令可以说是 MongoDB 中最为基础的命令

下一篇:《MongoDB 数据操作(七)聚合(1)取得集合的数据量》

Responses
选择表情