我有一个包含以下结构的文档的集合:
{
"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
字典中查找所有不同的键。以下代码使用Microsoft.Azure.DocumentDB.Core
nuget包库调用CosmosDB:
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
上的UI运行查询时,查询工作正常。
通过.NET客户端运行查询时,出现以下错误:
Microsoft.Azure.Documents.BadRequestException:消息: {“错误”:[{“严重性”:“错误”,“位置”:{“开始”:25,“结束”:33},“代码”:“ SC1001”,“消息”:“语法” 错误,“ DISTINCT”附近的语法不正确。“}]},Windows / 10.0.16299 documentdb-netcore-sdk / 1.9.1 ---> System.Runtime.InteropServices.COMException:来自HRESULT的异常: 0x800A0B00
我还没有针对 real CosmosDB进行过尝试,但是事实证明,这在数据浏览器中有效,这使我认为这不是模拟器的功能问题。
答案 0 :(得分:1)
我还没有针对真正的CosmosDB进行过尝试,但是事实是 这在数据浏览器中有效,使我认为它不是一种功能 模拟器出现问题。
宇宙数据库仿真器或实际版本在SQL中支持distinct
。 (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-preview或更高版本中解决。您可以更新软件包的版本。
希望它对您有帮助。