第30章:MongoDB-索引--地理信息索引

时间:2023-03-09 19:31:28
第30章:MongoDB-索引--地理信息索引
①地理信息索引

地理信息索引分为两类:2D平面索引,另外就是2DSphere球面索引。在2D索引里面基本上能够保存的信息都是坐标,而且坐标保存的就是经纬度坐标。

范例:定义一个商铺的集合

db.shop.insert(lloc[10,10]);

db.shop.insert(lloc[10,11]);

db.shop.insert(lloc[11,10]);

db.shop.insert(lloc[12,15]);

db.shop.insert(lloc[16,17]);

db.shop.insert(lloc[90,90]);

db.shop.insert(lloc[120,130]);

②范例:为shop的集合定义2D索引

db.students.ensureIndex({"loc":"2d"});

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

·“$near”查询,查询距离某个点最近的坐标点;

·“$geoWithin”查询:查询某个形状内的点;

③范例:假设我的现在的坐标是:[11,11]
db.shop.find({loc:{"$near":[11,11]}});
但是如果执行了以上的查询,实际上会将数据集合里面的前100个点的信息都返回来了,可是太远了,设置一个距离范围—— 5个点内的。
④范例:设置查询距离范围
db.shop.find({loc:{"$near":[11,11]},"$maxDistance":5});

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

但是也可以设置一个查询的范围,使用“$geoWithin”查询,而可以设置的范围:

·矩形范围($box):{"$box":[[x1,y1],[x2,y2]]};

·圆形范围($center):{"$center" : [[x1,y1],r]};

·多边型($polygon):{"$polygon" :[[x1,y1],[x2,y2][x3,y3] , ...]}

⑤范例:查询矩形
db.shop.find({loc:{"$geoWithin":{"$box":[9,9],[11,11]}}});
⑥范例:查询圆形
db.shop.find({loc:{"$geoWithin":{"$center":[11,11],2}}});
⑦范例:利用runCommand()实现信息查询
在MongoDB数据库里面,除了一些支持的操作函数之外,还有一个重要的命令:runCommand(),这个函数可以执行所有的特定的MongoDB命令。
db.runCommand({"geoNear":"shop",near:[10,10],maxDistance:5,num:2});