執行查詢語句,使用 $nearSphere /** * 1千米 = 0.6213712英里 15千米 = 9.3205679英里 查詢通過除以地球的大約赤道半徑(3963.2英里)將距離轉換為弧度。 * ①:如果是第一頁,查詢50公裡內的老朋友店鋪, * ②:查詢15公裡內所以的置頂服務商家,然後根 ...
執行查詢語句,使用 $nearSphere
/**
* 1千米 = 0.6213712英里 15千米 = 9.3205679英里 查詢通過除以地球的大約赤道半徑(3963.2英里)將距離轉換為弧度。
* ①:如果是第一頁,查詢50公裡內的老朋友店鋪,
* ②:查詢15公裡內所以的置頂服務商家,然後根據分頁參數來截取
* ③:0.00156785=0.6213712*10/3963.2(所以下列sql查詢的結果是以經緯度[106.653412, 26.696467]為圓心半徑10公裡以內的所有user信息)
*/
/sql語句 db.getCollection('user').find({ "location": { "$nearSphere": {"$geometry": { "type": "Point", coordinates: [106.653412, 26.696467] },"$maxDistance": 0.00156785 } } })
查詢報錯 planner returned error: unable to find index for $geoNear query
解決方案
這是因為當前查詢的是MongoDB的GeoJSON 對象,查詢中使用了地理空間查詢運算符:$nearSphere, 而使用它則需要地理空間索引,而定義為 GeoJSON 點的位置數據的索引為2dsphere索引。
故首先創建 2dsphere 類型的索引,如下語句:
//執行如下sql,給我user表的位置欄位"location"創建 2dsphere 類型的索引
db.user.createIndex({"location":"2dsphere"});
添加索引後即可通過上面的位置查詢sql成功查詢出結果集