如果我們想要對LBS的查詢結果再去做子查詢,來達到資料分頁的效果,則需要使用 MongoDB 的 Aggregation 功能,Aggregation 可以針對上一查詢的結果,再去做另外的子查詢,所以 Aggregation 的順序是有差別的,盡可能好將能夠快速過濾資料的查詢語法放到最前方,這樣可以提升查詢時的效能。
但我們如果要使用 Aggregation 做地理位置查詢,則需要將該LBS 查詢放在 Aggregation 查詢的第一個位置才可以做 LBS 的查詢。
使用 Aggregation:$geoNear 做地理位置查詢
我們一樣使用"使用MongoDB做地理位置查詢(簡易版)"中的台北捷運車站做測試資料及建立索引
找捷運台北車站附近距離2公里內的捷運站
找捷運台北車站附近距離2公里內的捷運站、依照建立時間做排序
除了找出距離內的捷運車站資料,我們還希望依照資料建立的時間做排序
找捷運台北車站附近距離2公里內的捷運站、依照建立時間做排序、找前3筆資料
如果我們要將排序後的資料做分頁資料顯示的話,我們則會限制資料筆數
這裡你就會發現,使用 Aggregation 做地理位置筆數限制,就可以真的找出我們預期的資料了要
找捷運台北車站附近距離2公里內的捷運站、依照建立時間做排序、找第4、5、6筆的資料
如果你要找第二頁的資料(一頁為3筆資料),則可以使用$skip來指定要略過幾筆資料
參考資料
- Aggregation Introduction — MongoDB Manual 2.4.6
- Aggregation Framework Operators — MongoDB Manual 2.4.6
- $geoNear (aggregation)
- geoNear
- $sort — MongoDB Manual 2.4.6
- $sort (aggregation)
沒有留言:
張貼留言