首页 > MongoDB > 地理空间索引及查询

地理空间索引及查询

来源:原创 作者:thomas 分类:MongoDB 阅读:829 日期:2014-05-26

1、如何建立地理空间索引

示例1:

> db.map.ensureIndex({"gps" : "2d"});

对gps键建立地理空间索引,参数不是1或-1,而是"2d"。

集合中gps键对应的值必须符合如下条件:

如1:{gps : [2, 100]}一个包含两个元素的数组

如2:{gps : {"x" : 2, "y" : 100}}包含两个键的内嵌文档

如3:{gps : {"foo" : 2, "bar" : 100}}键名可以随意取

2、地理空间索引值的范围

默认情况下,地理空间索引假设 值的范围为-180~180。要使用其他值,可以通过ensureIndex的选项来指定最大值与最小值,

示例2:

> db.map.ensureIndex({"light-year" : "2d"}, {"min" : -1000, "max" : 1000});

3、普通方式(find)查询地理空间

示例3:

> db.map.find({"gps" : {"$near" : [2, 5]}});

这会按照点(2, 5)由远及近的方式将map集合中的所有文档都返回,在没有使用limit限制时,默认返回100个文档。

> db.map.find({"gps" : {"$near" : [2, 5]}}).limit(5);

返回最多5个文档。

4、使用数据库命令(runCommand)查询地理空间

示例4:

> db.runCommand({geoNear : "map", near : [2, 5], num : 3});

geoNear还会返回每个文档到查询点的距离。

5、查找矩形内的所有点

对于矩形,使用"$box"选项:

示例5:

> db.map.find({"gps" : {"$within" : {"$box" : [[0, 0], [2, 2]]}}});

"$box"参数的值是个二维数组,包含两个值,第一个元素指定了左下角的坐标,第二个元素指定了右上角的坐标。

6、查找圆形内的所有点

对于圆形,使用"$center"选项:

示例6:

> db.map.find({"gps" : {"$within" : {"$center" : [[0, 0], 5]}}});

查找圆心(0, 0),半径为5的圆形内的所有点。

7、复合地理空间索引

将地理空间索引与普通索引组合起来

示例7:

> db.map.ensureIndex({"gps" : "2d", "name" : 1});

十日谈技术博客

 

热门文章 更多>

微信扫一扫,关注技术十日谈