巧妙的利用Mongodb做地理空间查询

 更新时间:2017年02月28日 09:38:24   作者:落叶的博客  
本篇文章将会以Mongodb为数据库,讲述如何在数据库层级进行定位查询。具有很好的参考价值,下面跟着小编一起来看下吧

MongoDB是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

在移动开发中,经常会用到定位的功能,例如美团、饿了么、猫眼电影等的app,都是使用了移动端定位,然后查找出自己地理位置附近的一些服务、信息。

地理位置索引是MongoDB早已被用户所熟知的特性,其球面(Spherical)和平面(Flat)两种模式,提供了丰富的地址位置的表示方式,如2d、2dsphere和GeoJSON等,对于移动App,如地图软件、打车软件、外卖软件,MongoDB强大的地理位置索引功能使其最佳选择;此外,对于物联网、智慧都市等领域,也需要大量的地理位置相关操作,这些都是MongoDB的竞技场。

本篇文章将会以Mongodb为数据库,讲述如何在数据库层级进行定位查询。

举个例子,我们需要做一个app,商家可以把自己的商品发布到app上,用户打开app查看离自己从近到远的商品。

如果没有地理位置的需求,那好办,直接插库然后查库就ok了,但是如果用到了地理位置,则需要用到Mongodb的一些位置功能。

Mongodb有一种地理空间索引,利用它可以进行经纬度的计算,下面继续介绍如何使用该功能。

下面以Nodejs+mongoose为例

1.创建Schema:

  const mongoose = require( 'mongoose' );
  let goodsSchema = new mongoose.Schema( {
   name: String,
   price: Number,
   location: {
     type: [ Number ],
     index: {
       type: '2dsphere',
       sparse: true
     }
   }
  }, {
   collection: 'Goods'
  } )

2.创建Model

    let goodsModel = mongoose.model(‘Goods', goodsSchema)

3.插入数据

    按照以下数据格式往数据库插入数据:

  {
   "name":"名字",
   "price":12,
   "location":[经度,纬度]
  }

4.查看用户附近的数据

  goodsModel.find( {
     'location': {
       $nearSphere: [
         parseFloat( 经度 ),
         parseFloat( 纬度 )
       ],
       $maxDistance: 1000
     }
   } ).limit(10).skip(0).lean().exec();

总结:本次主要分享位置索引的用法,十分实用的一个功能,demo没有做得那么手把手,但是主要的骨架是出来了,可以自由发挥谢谢啊!

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Springcloud Eureka配置及集群代码实例

    Springcloud Eureka配置及集群代码实例

    这篇文章主要介绍了Springcloud Eureka配置及集群代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • springboot利用redis、Redisson处理并发问题的操作

    springboot利用redis、Redisson处理并发问题的操作

    这篇文章主要介绍了springboot利用redis、Redisson处理并发问题的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • IDEA最新激活码2021(IDEA2020.3.2最新永久激活方法)

    IDEA最新激活码2021(IDEA2020.3.2最新永久激活方法)

    这篇文章主要介绍了IDEA最新激活码2021(IDEA2020.3.2最新永久激活方法),本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 详解Java中Iterator迭代器的用法

    详解Java中Iterator迭代器的用法

    这篇文章主要介绍了Java中Iterator迭代器的用法,比较简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • 基于Java验证jwt token代码实例

    基于Java验证jwt token代码实例

    这篇文章主要介绍了基于Java验证jwt token代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 详解MyBatis逆向工程

    详解MyBatis逆向工程

    本篇文章主要介绍了详解MyBatis逆向工程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Mybatis 动态SQL搭建环境的全过程

    Mybatis 动态SQL搭建环境的全过程

    这篇文章主要给大家介绍了关于Mybatis动态SQL搭建环境的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

    微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

    本篇文章主要介绍了微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • struts2自定义拦截器的示例代码

    struts2自定义拦截器的示例代码

    本篇文章主要介绍了struts2自定义拦截器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SpringBoot集成shiro,MyRealm中无法@Autowired注入Service的问题

    SpringBoot集成shiro,MyRealm中无法@Autowired注入Service的问题

    今天小编就为大家分享一篇关于SpringBoot集成shiro,MyRealm中无法@Autowired注入Service的问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论