如何用Mongodb做地理空間查詢

來源:互聯網
上載者:User
Mongodb,分布式文檔儲存資料庫,由C++語言編寫,旨在為WEB應用提供可擴充的高效能資料儲存解決方案。MongoDB是一個高效能,開源,無模式的文檔型資料庫,是當前NoSql資料庫中比較熱門的一種。它在許多情境下可用於替代傳統的關係型資料庫或鍵/值儲存方式。

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

所以本篇文章將會以Mongodb為資料庫,講述如何在資料庫層級進行定位查詢。

分析

舉個例子,我們需要做一個app,商家可以把自己的商品發布到app上,使用者開啟app查看離自己從近到遠的商品。

如果沒有地理位置的需求,那好辦,直接插庫然後查庫就ok了,但是如果用到了地理位置,則需要用到Mongodb的一些位置功能。

Mongodb有一種地理空間索引,利用它可以進行經緯度的計算,下面繼續介紹如何使用該功能。

實現

下面以Nodejs+mongoose為例

建立Schema:

const mongoose = require( 'mongoose' );let goodsSchema = new mongoose.Schema( { name: String, price: Number, location: {     type: [ Number ],     index: {         type: '2dsphere',         sparse: true     } }}, { collection: 'Goods'} )

建立Model

let goodsModel = mongoose.model(‘Goods’, goodsSchema)

插入資料

按照以下資料格式往資料庫插入資料:

{ "name":"名字", "price":12, "location":[經度,緯度]}

查看使用者附近的資料

goodsModel.find( {     'location': {         $nearSphere: [             parseFloat( 經度 ),             parseFloat( 緯度 )         ],         $maxDistance: 1000     } } ).limit(10).skip(0).lean().exec();


以上內容就是和大家分享了位置索引的用法,十分實用的一個功能,希望大家學以致用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.