Document/CosmosDB .Net 客户端"DISTINCT" 查询错误
Document/CosmosDB .Net client "DISTINCT" query error
我有一个包含具有以下结构的文档的集合:
{
"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: 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
我还没有在 real 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.
cosmos db 模拟器或真实版本在 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 或更高版本中得到了解决。你可以更新你的包的版本。
我有一个包含具有以下结构的文档的集合:
{
"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
.
当 运行通过 .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
我还没有在 real 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.
cosmos db 模拟器或真实版本在 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 或更高版本中得到了解决。你可以更新你的包的版本。