mongodb 计算坐标距离

使用场景很多 ,不瞎比比了 ,直接上案例。

创建数据集合location:

db.location.insert({loc:[1,3]});
db.location.insert({loc:[3,4]});
db.location.insert({loc:[0,-3]});
db.location.insert({loc:[-6,2]});
db.location.insert({loc:{x:9,y:5}});
db.location.insert({loc:{lng:-9.2,lat:21.3}});

查看数据:

db.location.find()

这里写图片描述

注意:一定要建立2d索引,否则不能计算距离(我在这里掉坑了)

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

使用geoNear计算距离:

使用runCommand来执行geoNear命令。

db.runCommand({
    "geoNear":"location",   //指定要在那个数据集里查询
    “near” : [0,0]          //指点参与计算的目标点
})

默认会查询出前100条数据

db.runCommand({"geoNear":"location","near":[0,0]})
{
        "waitedMS" : NumberLong(0),         
        "results" : [
                {
                        "dis" : 3,
                        "obj" : {
                                "_id" : ObjectId("57b313b9190404253628744e"),
                                "loc" : [
                                        0,
                                        -3
                                ]
                        }
                },
                {
                        "dis" : 3.1622776601683795,
                        "obj" : {
                                "_id" : ObjectId("57b313b9190404253628744c"),
                                "loc" : [
                                        1,
                                        3
                                ]
                        }
                },
                {
                        "dis" : 5,
                        "obj" : {
                                "_id" : ObjectId("57b313b9190404253628744d"),
                                "loc" : [
                                        3,
                                        4
                                ]
                        }
                },
                {
                        "dis" : 6.324555320336759,
                        "obj" : {
                                "_id" : ObjectId("57b313b9190404253628744f"),
                                "loc" : [
                                        -6,
                                        2
                                ]
                        }
                },
                {
                        "dis" : 10.295630140987,
                        "obj" : {
                                "_id" : ObjectId("57b313b91904042536287450"),
                                "loc" : {
                                        "x" : 9,
                                        "y" : 5
                                }
                        }
                },
                {
                        "dis" : 23.201939574095956,
                        "obj" : {
                                "_id" : ObjectId("57b313be1904042536287451"),
                                "loc" : {
                                        "lng" : -9.2,
                                        "lat" : 21.3
                                }
                        }
                }
        ],
        "stats" : {
                "nscanned" : 18,     //在数据库操作期间扫描的索引项的总数
                "objectsLoaded" : 6, //在数据库操作期间加载的数据项
                "avgDistance" : 8.497400449264683,
                "maxDistance" : 23.201939574095956,
                "time" : 1           //查询使用的时间 毫秒作单位
        },
        "ok" : 1
}

在数据集环境中使用geoNear命令:
使用聚合查询,通过管道机制,能够方便的对数据进行过滤和排序等

db.location.aggregate({
    $geoNear:{
        near:[10,2],
        distanceField:"distance"    //指定查询出来的距离数据的别名
    }
})

查询结果:

{ "_id" : ObjectId("57b313b91904042536287450"), "loc" : { "x" : 9, "y" : 5 }, "distance" : 3.1622776601683795 }
{ "_id" : ObjectId("57b313b9190404253628744d"), "loc" : [ 3, 4 ], "distance" : 7.280109889280518 }
{ "_id" : ObjectId("57b313b9190404253628744c"), "loc" : [ 1, 3 ], "distance" : 9.055385138137417 }
{ "_id" : ObjectId("57b313b9190404253628744e"), "loc" : [ 0, -3 ], "distance" : 11.180339887498949 }
{ "_id" : ObjectId("57b313b9190404253628744f"), "loc" : [ -6, 2 ], "distance" : 16 }
{ "_id" : ObjectId("57b313be1904042536287451"), "loc" : { "lng" : -9.2, "lat" : 21.3 }, "distance" : 27.223702907576
698 }

更多参数见$geoNear (aggregation)

另外 $geoWithin 可以计算某点与几何图行的距离

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值