zoukankan      html  css  js  c++  java
  • MongoDB(课时25 地理信息索引)

    3.6.4 地理信息索引

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

    范例:定义一个shop的集合

    db.shop.insert({loc : [10, 10]})  # loc表示坐标

    db.shop.insert({loc : [11, 10]})

    db.shop.insert({loc : [10, 11]})

    db.shop.insert({loc : [12, 15]})

    db.shop.insert({loc : [16, 17]})

    db.shop.insert({loc : [90, 90]})

    db.shop.insert({loc : [150, 160]})

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

    db.shop.ensureIndex({"loc" : "2d"})  # 2d不能写成2D

    (automatically 机械的,自动的)

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

    • "$near"查询:查询距离某个点最近的坐标点
    • "$geoWithin"查询:查询某个形状内的点

    范例:查询坐标是:[11, 11]附近的点

    db.shop.find({loc : {"$near" : [11, 11]}}) 

    执行上面代码会将数据集合里面的前100 个点的信息都返回。

    现在设置范围——两点距离最大为5:

    范例:设置范围

    db.shop.find({loc : {"$near" : [11, 11], "$maxDistance" : 5}})  # "$maxDistance"最大距离是5(此处为欧式距离)

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

    但可以使用"$geoWithin"设置一个查询范围,设置范围如下:

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

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

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

    范例:查询矩形

    db.shop.find({loc : {"$geoWithin" : {"$box" : [[9, 9], [11, 11]]}}})

    范例:查询圆形

    db.shop.find({loc : {"$geoWithin" : {"$center" : [[10, 10], 2]}}})

    在MongoDB里面,除了一些支持操作函数之外,还有一个重要的命令:runCommand(),这个函数可以执行所有的特定的MongoDB命令。

    范例:利用runCommand()实现信息查询

    db.runCommand({"geoNear" : "shop", near : [10, 10], "$maxDistance" : 5, num : 2})

    db.runCommand({"geoNear" : "shop", near : [10, 10], maxDistance : 5, num : 2})

    results中有两个结果,即返回两条数据;

    "nscanned":33,表示扫描了33条数据;

    "avgDistance":0.5,表示扫描平均距离0.5;

    "maxDistance":1,表示最大距离1;

    "time":11,表示扫描用时11毫秒。

    runCommand命令是MongoDB中最为基础的命令。

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/keye/p/7998827.html
Copyright © 2011-2022 走看看