Document / CosmosDB .Net客户端“ DISTINCT”查询错误

时间:2018-09-13 09:12:36

标签: azure-cosmosdb azure-cosmosdb-sqlapi

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

{
    "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进行过尝试,但是事实证明,这在数据浏览器中有效,这使我认为这不是模拟器的功能问题。

1 个答案:

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

希望它对您有帮助。