У меня есть коллекция, содержащая документы со следующей структурой:
{
"Identifier": 1,
"Values": {
"value1": "33806",
"value2": "10",
"value3": "0"
},
...
}
Я создал UDF для извлечения ключей из словаря Values
:
function getKeys(dictionary) {
let result = [];
for (var key in dictionary) {
result.push(key);
}
return result;
}
И у меня есть запрос, который использует UDF для поиска всех отдельных ключей в словаре Values
. Следующий код вызывает CosmosDB с помощью библиотеки пакетов nuget Microsoft.Azure.DocumentDB.Core
:
var query = $@"
SELECT DISTINCT
VALUE i
FROM
(
SELECT
VALUE
{{
'keys': udf.getKeys(c.Values),
'id': c.Identifier
}}
FROM c
WHERE c.Identifier = @Identifier
) AS dt
JOIN i in dt.keys";
var parameters = new SqlParameterCollection(new[]
{
new SqlParameter("@Identifier", identifier)
});
var documentQuery = store.Query(new SqlQuerySpec(query, parameters));
Это работает с эмулятором Azure CosmosDB. Запрос отлично работает, когда я запускаю его через пользовательский интерфейс на http://localhost:8081
.
При выполнении запроса через .NET-клиент я получаю следующую ошибку:
Microsoft.Azure.Documents.BadRequestException: Message: {"errors":[{"severity":"Error","location":{"start":25,"end":33},"code":"SC1001","message":"Syntax error, incorrect syntax near 'DISTINCT'."}]}, Windows/10.0.16299 documentdb-netcore-sdk/1.9.1 ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A0B00
Я еще не пробовал это против настоящий CosmosDB, однако тот факт, что это работает в проводнике данных, заставляет меня думать, что это не проблема с возможностями эмулятора.
I have not yet tried this against real CosmosDB, however the fact that this works in the data explorer makes me think it isn't a capability issue with the emulator.
distinct
поддерживается в sql эмулятором cosmos db или реальной версией. (https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6719531-provide-support-for-distinct?page=1&per_page=20)
Я протестировал ваш код с documentdb-netcore-sdk v.2.0.0
, и он отлично работает. Согласно этому документу, ошибка, по-видимому, решена в предварительной версии 2.0.0 или более поздней версии. Вы можете обновить версию своего пакета.
Надеюсь, это поможет тебе.
Ура за это! Похоже, обновление вышло 5 дней назад! Дам это сейчас