欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-06 14:16:32
mongodb是一个基于分布式文件存储的数据库。由 c++ 语言编写。旨在为web应用提供可扩展的高性能数据存储解决方案。 在移动开发中,经常会用到定位的功能,例如美团、...

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没有做得那么手把手,但是主要的骨架是出来了,可以*发挥谢谢啊!

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