《MongoDB實現地理位置查詢》要點:
本文介紹了MongoDB實現地理位置查詢,希望對您有用。如果有疑問,可以聯系我們。
相關主題:非關系型數據庫
歡迎參與《MongoDB實現地理位置查詢》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
MongoDB 是一個基于分布式文件存儲的數據庫, 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的.
本文主要是在實際項目中碰到地理位置查詢時的學習記錄.
MongoDB地理位置查詢文檔:https://docs.mongodb.com/manual/reference/operator/query-geospatial
MongoDB支持地理位置索引,可以直接用于位置距離計算和查詢.查詢結果默認將會由近到遠排序,且查詢結果也包含目標點對象、距離目標點的距離等信息.
geoNear是MongoDB原生支持的查詢函數,所以性能上也做到了高度的優(yōu)化,完全可以應付生產環(huán)境的壓力.
https://docs.mongodb.com/manual/reference/command/geoNear/
兩種索引方式
2d index:
使用2d index 能夠將數據作為2維平面上的點存儲起來, 在MongoDB 2.2以前推薦使用2d index索引.
2dsphere index:
2dsphere index 支持球體的查詢和計算,同時它支持數據存儲為GeoJSON 和傳統(tǒng)坐標.
3種距離單位
米(meters)
平面單位(flat units,可以理解為經緯度的“一度”)
弧度(radians)
2d索引能同時支持$center和$centerSphere,
2dsphere索引支持$centerSphere.
$center默認是度,$centerSphere默認距離是弧度
樣例代碼
//MongoDB 實現lbs查詢
/***************************
首先需對col里的loc設置索引為'2d',方可進行$near查詢
db.col.ensureIndex({'loc':'2d'})
db.col.getIndexes()
****************************/
// maxDistance單位是弧度, 地球表面1弧度距離約為6378137米, 0.001弧度距離為6378米
db.col.find({"loc": {$near: [longtitude, lattitude], $maxDistance:0.1}})
樣例代碼
db.user.find({"geo": {$near: [118.10388605,24.48923061], $maxDistance:0.1}},{id:1, name:1, state:1, geo:1}).limit(1).pretty()