2016-05-16 57 views
0

會像文檔DB - ST_DISTANCE

SELECT TOP 1 * ST_DISTANCE etc 

或者更具體地說

SELECT TOP 1 * FROM c WHERE ST_DISTANCE(c.AssetLocation, { 'type': 'Point', 'coordinates': [115.58, 21.84] }) < 49999 

回報最接近對象的查詢,如果沒有,我怎麼會按距離?

感謝,

伊恩

+0

最接近什麼? –

+0

最接近我提供給ST_DISTANCE函數的一個點 –

+0

否,它將返回數據庫中某個任意點與您提供的點之間的距離,您可以按距離排序 –

回答

0

DocumentDB本身並不支持最近或ORDER BY使用地理空間索引呢。

ORDER BY的最佳方法是在查詢中投影(SELECT)距離,並通過客戶端或通過存儲過程對其進行排序(降低多次往返的延遲成本)。

對於大型數據集,您可以通過在小值開始的距離上添加一個過濾器(WHERE),並通過增加距離值來迭代/步進,直到找到第一個點爲止進行最優化。

+0

你能否給我提供一個存儲過程的例子,通過這個存儲過程,我可以首先使用ST_DISTANCE計算距離,然後在文檔數據庫中通過距離對它進行排序。請幫助我,因爲我從上週就陷入了這個問題。謝謝 !! –

+0

作爲一種更樂觀的模式:我用另一種方式進行空間範圍查詢 - 我只是從數據庫中獲得TOP 100並過濾客戶端。如果碰巧我會得到100個結果,表明我沒有得到所有結果(基本上從來不是這樣),我正在做一些日誌記錄和一個帶有WHERE條件的回退例程。這允許我運行樂觀(並且效率更高的查詢)99.x%的時間。 –