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中最为基础的命令。

  • 相关阅读:
    Flutter-动画-原理篇
    Flutter-动画-实践篇
    Flutter-动画-概念篇
    Android-textview图文混排(网络图片)
    Android--解决图片保存到相册显示1970年1月1日 8:00的问题
    Android--使用JobService实现进程保活
    Android--获取手机联系人和Sim卡联系人
    git 代码服务器的网页版gitweb的搭建
    Android 内存管理中的 Shallow heap Retained heap
    欧几里德算法----最大公约数算法
  • 原文地址:https://www.cnblogs.com/keye/p/7998827.html
Copyright © 2011-2022 走看看