利用Mongodb做地理空間查詢

mylimo 7年前發布 | 43K 次閱讀 MongoDB NoSQL數據庫

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'
    } )
  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沒有做得那么手把手,但是主要的骨架是出來了,可以自由發揮~

 

來自:http://www.jianshu.com/p/9c8319739bee

 

 本文由用戶 mylimo 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!