文档/CosmosDB .Net 客户端"DISTINCT"查询错误



我有一个集合,其中包含具有以下结构的文档:

{
"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.Corenuget 包库调用 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: Message: {"错误":[{"严重性":"错误","位置":{"开始":25,"结束":33},"代码":"SC1001","消息":"语法 错误,"DISTINCT"附近的语法不正确。 documentdb-netcore-sdk/1.9.1 --->System.Runtime.InteropServices.COMException: HRESULT 的异常: 0x800A0B00

我还没有在真正的CosmosDB 上尝试过这个,但是这在数据资源管理器中工作的事实让我认为这不是模拟器的功能问题。

我还没有对真正的CosmosDB进行过尝试,但是事实上 这在数据资源管理器中有效,让我认为这不是一种功能 模拟器的问题。

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预览或更高版本中得到解决。您可以更新软件包的版本。

最新更新