CosmosDb Геопространственный запрос - OrderBy - PullRequest
0 голосов
/ 19 июня 2020

У меня рабочая ширина 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: {"errors": [{"severity": "Error" , "message": "Неподдерживаемое предложение ORDER BY. Выражение элемента ORDER BY не могло быть сопоставлено с путем к документу."}]}

Итак, я попробовал что-то вроде:

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

Но Я получаю другое исключение, сообщающее мне, что метод Distance может выполняться только в CosmosDb.

Единственный вариант, который я вижу, - это создать свой собственный метод Distance, после чего я смогу заказать свою коллекцию. Но у меня предел в 5000 метров. Если в пределах 5000 м есть только 3 элемента, мне нужно будет выполнить другой запрос с увеличенным лимитом. Но у меня такое чувство, что это не оптимизировано.

Есть ли у вас какие-нибудь предложения?

1 Ответ

0 голосов
/ 19 июня 2020

К сожалению, ORDER BY на ST_DISTANCE сегодня не поддерживается. В конечном итоге это планируется сделать. Вы можете отслеживать этот запрос функции на User Voice .

Спасибо.

...