引.
MongoDB---索引(四)
地理空间查询有两种方式:
db.map.find({"gps":{"$near":[49,-49]}})
这会按照点(49,-49)由近及远的方式将map集合的所有文档返回.在没有指定limit值时,默认是100个文档.
要是不需要那么多结果,就应该设置一个少点的值以节约资源.
db.map.find({"gps":{"$near":[49,-49]}}).limit(1)
也可以使用:
db.runCommand({geoNear:"map",near:[49,-49],num:1})
geoNear还会返回每个文档到查询点的距离.这个距离是以你插入的数据为单位的,如果按照经纬度的角度插入,则
距离就是经纬度.find和"$near"组合不会给出距离,但若是结果大于4M,这是唯一的选择.
MongoDB不但能找到靠近一个点的文档,还能找到指定形状内的文档.做法是将原来的"$near"换成"$within". www.2cto.com
"$within"获取形状作为参数.这些形状可以是 矩形,圆形等.
对于矩形:
db.map.find({"gps":{"$within":{"$box":[[10,20],[15,30]]}}})
"$box"的参数是两个元素的数组,一个元素指定了左下角的坐标,第二个指定右上角的坐标.
对于圆形:
db.map.find({"gps":{"$within":{"$center":[[12,25],5]}}})
12.复合地理空间索引
应用程序要找的东西经常不只是一个地点.可以将地理空间索引与普通索引组合起来.
MongoDB的地理空间索引假设索引的内容是在一个平面上的,也就是说,对于球体的地球,并不是很精确.
作者 refactor