CosmosDb地理空间查询-OrderBy

时间:2020-06-19 14:28:24

标签: azure-cosmosdb geospatial

我正在使用Azure CosmosDB(SQL API),并且正在尝试使用Microsoft.Azure.Cosmos.Spatial执行一些地理空间查询。

例如,我想拿第五个最接近的项目。所以我尝试了:

var query = Collection.GetItemLinqQueryable<T>();
var items = query.OrderBy(i => i.Location.Distance(myCenterPoint)).Take(5);

但是我得到以下异常: Microsoft.Azure.Cosmos.Query.Core.Exceptions.ExpectedQueryPartitionProviderException:{“错误”:[{“严重性”:“错误”,“消息”:“不支持的ORDER BY子句。ORDERBY项目表达式无法映射到文档路径。“}]}

所以我尝试了类似的东西:

var items = query.Where(i => i.Location.Distance(myCenterPoint) < 5000).ToList();
var newItems = items.OrderBy(i => i.Location.Distance(myCenterPoint)).ToList();

但是我收到另一个异常,告诉我Distance方法只能在CosmosDb中执行。

我看到的唯一选择是创建自己的Distance方法,然后就可以订购我的收藏了。但是我有5000m的限制。如果5000m内只有3个项目,我将需要执行另一个查询并增加了限制。但是我觉得这还没有优化。

您有什么建议吗?

1 个答案:

答案 0 :(得分:0)

很遗憾,今天不支持ST_DISTANCE的ORDER BY。这是最终要完成的路线图。您可以在User Voice上跟踪该功能请求。

谢谢。

相关问题