2016-05-16 58 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%的时间。 –