Mongodb地理位置查詢文檔
MongoDB支持地理位置索引,可以直接用于位置距離計算和查詢畜挥。查詢結(jié)果默認(rèn)將會由近到遠(yuǎn)排序仔粥,且查詢結(jié)果也包含目標(biāo)點對象、距離目標(biāo)點的距離等信息蟹但。
geoNear是MongoDB原生支持的查詢函數(shù)躯泰,所以性能上也做到了高度的優(yōu)化,完全可以應(yīng)付生產(chǎn)環(huán)境的壓力华糖。geoNear
兩種索引方式
2d index:
使用2d index 能夠?qū)?shù)據(jù)作為2維平面上的點存儲起來麦向, 在MongoDB 2.2以前 推薦使用2d index索引。
2dsphere index:
2dsphere index 支持球體的查詢和計算客叉,同時它支持?jǐn)?shù)據(jù)存儲為GeoJSON 和傳統(tǒng)坐標(biāo)诵竭。
3種距離單位:
米(meters)
平面單位(flat units,可以理解為經(jīng)緯度的“一度”)
弧度(radians)
2d索引能同時支持$center和$centerSphere十办,
2dsphere索引支持$centerSphere秀撇。
$center默認(rèn)是度,$centerSphere默認(rèn)距離是弧度
//mongodb 實現(xiàn)lbs查詢
/***************************
首先需對col里的loc設(shè)置索引為'2d',方可進(jìn)行$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()
Paste_Image.png