利用Mongodb做地理空間查詢


MongoDB
是一個基於分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

前言

在移動開發中,經常會用到定位的功能,例如美團、餓了么、貓眼電影等的app,都是使用了移動端定位,然后查找出自己地理位置附近的一些服務、信息。

所以本篇文章將會以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'
} )
  1. 創建Model
let goodsModel = mongoose.model(‘Goods’, goodsSchema)
  1. 插入數據
按照以下數據格式往數據庫插入數據:
{
    "name":"名字",
    "price":12,
    "location":[經度,緯度]
}
  1. 查看用戶附近的數據
goodsModel.find( {
        'location': {
            $nearSphere: [
                parseFloat( 經度 ),
                parseFloat( 緯度 )
            ],
            $maxDistance: 1000
        }
    } ).limit(10).skip(0).lean().exec();

總結

本次主要分享位置索引的用法,十分實用的一個功能,demo沒有做得那么手把手,但是主要的骨架是出來了,可以自由發揮~

備注: 這是后台需要弄的,android,ios,web需要使用定位服務找到用戶的經緯度,傳給后台即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM