巧妙的利用Mongodb做地理空間查詢
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
在移動開發(fā)中,經(jīng)常會用到定位的功能,例如美團、餓了么、貓眼電影等的app,都是使用了移動端定位,然后查找出自己地理位置附近的一些服務(wù)、信息。
地理位置索引是MongoDB早已被用戶所熟知的特性,其球面(Spherical)和平面(Flat)兩種模式,提供了豐富的地址位置的表示方式,如2d、2dsphere和GeoJSON等,對于移動App,如地圖軟件、打車軟件、外賣軟件,MongoDB強大的地理位置索引功能使其最佳選擇;此外,對于物聯(lián)網(wǎng)、智慧都市等領(lǐng)域,也需要大量的地理位置相關(guān)操作,這些都是MongoDB的競技場。
本篇文章將會以Mongodb為數(shù)據(jù)庫,講述如何在數(shù)據(jù)庫層級進行定位查詢。
舉個例子,我們需要做一個app,商家可以把自己的商品發(fā)布到app上,用戶打開app查看離自己從近到遠的商品。
如果沒有地理位置的需求,那好辦,直接插庫然后查庫就ok了,但是如果用到了地理位置,則需要用到Mongodb的一些位置功能。
Mongodb有一種地理空間索引,利用它可以進行經(jīng)緯度的計算,下面繼續(xù)介紹如何使用該功能。
下面以Nodejs+mongoose為例
1.創(chuàng)建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.創(chuàng)建Model
let goodsModel = mongoose.model(‘Goods', goodsSchema)
3.插入數(shù)據(jù)
按照以下數(shù)據(jù)格式往數(shù)據(jù)庫插入數(shù)據(jù):
{
"name":"名字",
"price":12,
"location":[經(jīng)度,緯度]
}
4.查看用戶附近的數(shù)據(jù)
goodsModel.find( {
'location': {
$nearSphere: [
parseFloat( 經(jīng)度 ),
parseFloat( 緯度 )
],
$maxDistance: 1000
}
} ).limit(10).skip(0).lean().exec();
總結(jié):本次主要分享位置索引的用法,十分實用的一個功能,demo沒有做得那么手把手,但是主要的骨架是出來了,可以自由發(fā)揮謝謝啊!
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
Java8中List轉(zhuǎn)換String字符串幾種方式
這篇文章主要給大家介紹了關(guān)于Java8中List轉(zhuǎn)換String字符串的幾種方式,在實際開發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,文中給出了幾種方法的示例代碼,需要的朋友可以參考下2023-07-07
帶你詳細了解Spring Security的注解方式開發(fā)
這篇文章主要介紹了詳解spring security四種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
如何利用Java實現(xiàn)MySQL的數(shù)據(jù)變化監(jiān)聽
在高并發(fā)和大數(shù)據(jù)環(huán)境下,實時獲取?MySQL?數(shù)據(jù)庫的增量變化對數(shù)據(jù)同步、數(shù)據(jù)分析、緩存更新等場景至關(guān)重要,下面我們就來看看如何通過Java實現(xiàn)MySQL的數(shù)據(jù)變化監(jiān)聽吧2025-02-02
maven assembly打包生成Java應(yīng)用啟動腳本bat和sh的方法
springboot應(yīng)用通過maven插件appassembler-maven-plugi生成啟動腳本bat和sh,這篇文章主要介紹了maven assembly打包生成Java應(yīng)用啟動腳本bat和sh,需要的朋友可以參考下2022-11-11
SpringBoot整合Mybatis?LocalDateTime?映射失效的解決
這篇文章主要介紹了SpringBoot整合Mybatis?LocalDateTime?映射失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringCloud 2020-Ribbon負載均衡服務(wù)調(diào)用的實現(xiàn)
這篇文章主要介紹了SpringCloud 2020-Ribbon負載均衡服務(wù)調(diào)用的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03

