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

网友投稿 324 2023-06-07


巧妙的利用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)JKbWtMjsya

3.插入数据

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

{

"name":"名字",

"price":12,

"location":[经度,纬度]

}

4.查看用户附近的数据

goodsModel.find( {

'location': {

$nearSphere: [

parseFloat( 经度 ),

parseFloat( 纬度 )

],

$maxDistance: 1000

}

} ).limit(10).skip(0).lean().exec();

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java 使用URLDecoder和URLEncoder对中文进行处理
下一篇:java 实现单链表逆转详解及实例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~