地图距离排序一(mongodb篇)

摘要:
首先,我们准备数据集,创建位置库,然后插入一些数据。Mongodb提供了两种地图索引,2d和2d球体。2d索引通过二维平面记录点坐标,并支持在平面几何中计算距离,而2d球体支持在球体上计算距离,并支持mongodb的所有地理空间查询方法。根据官方建议,如果mongodb版本大于2.6,则可以使用2dsphere索引。

首先我们准备数据集,创建一个 location 库,然后插入一些数据。如下:

db.location.insert({"lng":经度,"lat":纬度,"loc":[lng,lat]});
db.location.insert({"lng":1,"lat":1,"loc":[1,1]});
db.location.insert({"lng":2,"lat":2,"loc":[2,2]});
db.location.insert({"lng":3,"lat":3,"loc":[3,3]});
db.location.insert({"lng":-1,"lat":-1,"loc":[-1,-1]});
db.location.insert({"lng":-2,"lat":-2,"loc":[-2,2]});   
db.location.insert({"lng":-3,"lat":-3,"loc":[-3,-3]});

数据集准备好了之后,我们需要为 location 加上地图索引。mongodb 提供的地图索引有两种,分别是 2d 和 2dsphere。2d 索引通过二维平面记录点坐标,支持在平面几何中计算距离,而 2dsphere 则支持在球面上进行距离的计算,并且支持 mongodb 的所有地理空间查询方法。简单的理解,2dsphere 是 2d 的增强版。根据官方推荐,如果你的mongodb版本大于2.6,那么就用 2dsphere 索引 。如下:

db.location.ensureIndex({"loc":"2dsphere"})

索引加好后,我们就可以来实现按照离我最近排序了,姿势如下:

db.location.find({
    "loc":{
        "$nearSphere":{
            "$geometry":{
                "type":"Point",
                "coordinates":[0,0]
            }
        }
    }
})

按照离我最近排序,除了使用 $nearSphere 查询外,我们还可以使用 aggregate 来实现。

使用 aggregate 有两个好处。1.我们在进行排序的后,可以返回两点之间的距离。2.我们可以进行更为复杂的排序,例如我们可以先根据某个字段进行排序,然后该字段相同的情况下再根据距离排序。

使用 aggregate 查询时,我们还可以返回两点之间的距离,其中 distanceField 可以对距离字段进行重命名。姿势如下:

db.location.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ 0 , 0 ] },
        distanceField: "distance",
        spherical: true
     }  
   }
])

如果我们希望查询以某个点为中心的圆几公里以内的数据,那你的姿势可以如下:

db.location.find({
    "loc":{
        "$geoWithin":{
            "$centerSphere":[
                [
                    0,0
                ],
                 0.025 //单位为弧度
            ]
        }
    }
})

最后,mongodb 提供了许多更为复杂的查询方法,有需要的同学可以自己到官网查看。

免责声明:文章转载自《地图距离排序一(mongodb篇)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js数组中的每一项异步请求4. selenium中鼠标和键盘操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【mongoDB中级篇②】索引与expain

索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用btree来组织索引文件,并且可以按字段升序/降序来创建,便于排序. 数据准备 for (var i = 1; i <100000; i++) { db...

MongoDB 红宝书-MongoDB官网使用指南

本文转载自Mongodb中文社区:http://www.mongoing.com/archives/27359 无论你是MongoDB的使用者、爱好者、初学者还是路人甲,有一个学习与进修的资源宝藏是千万不可浪费的,那就是MongoDB官方网站。 进入网站首页后,会看到顶端简洁明了的导航栏: 产品:包含云服务Atlas、MongoDB Stich、Serve...

mongodb数据库磁盘碎片整理。

更新主题:数据库磁盘碎片整理。 更新说明:服务器mongodb数据库磁盘碎片整理。 更新时间:10.17-10.26 更新步骤: 从节点操作 关闭monitor监控程序; 确认是否从节点; Admin运行shutdownServer,关闭mongodb xmshard:SECONDARY> use admin xmshard:SECONDARY&...

vue项目在nginx中不能刷新问题

修改nginx配置文件为 server { listen 80; server_name www.vue.com; root html/xxx/dist/; client_max_body_size 500m; #图片路径拦截,定位到图片静态资源 location / { try_file...

MongoDB(4.4)使用

MongoDB(4.4)使用 1、MongoDB 安装服务(已经安装的不用) 打开bin目录下的mongod.cfg文件(注意:对应自己的安装路径) 可以看到已经给我们配置好了数据库存放路径和日志存放路径,还有网络设置,若需修改,直接在此处进行修改即可。安装(最好以管理员身份): mongod --config "E:mgbinmongod.cfg" -...

html中location的用法详解

【转自】https://blog.csdn.net/py941215/article/details/77825921 Location介绍 location指示了其所连接对象的url位置。Document和window对象中都有location属性,可以通过window.location和document.location访问。注意 如果想要获得当前文档...