Cosmos数据库阵列查询在.NET SDK中不起作用

问题描述

我正在尝试获取容器中使用的所有不同类别值,其中类别是字符串数组。

通过查看Cosmos DB sql文档,我构建了以下查询,该查询在执行sql并按预期返回不同类别的数组时在仿真器中起作用。

SELECT disTINCT * FROM c IN s.categories

结果

[
    "Running","Rugby","Icon"
]

但是,如果我通过Cosmos .NET SDK使用相同的查询,则会收到错误消息

“无法解决标识符“会话”。”

为什么此查询可在仿真器中而不是通过SDK进行?我是在做错什么还是SDK的问题?

样本数据:

{
"name": "Sample Entity","description": "<p></p>","startDateUtc": "2020-07-13T19:10:00Z","endDateUtc": "2020-07-13T20:00:00Z","categories": [
    "Running","Icon"
],"id": "h3foyhfk0a3betj1","dateCreated": "2020-07-15T06:33:57.9406583Z","lastUpdated": "2020-08-13T17:04:18.6182079Z" }

SDK代码

var query = new QueryDeFinition("SELECT disTINCT * FROM c IN s.categories");
var results = new List<TEntity>();
            
var resultSetIterator = _container.GetItemQueryIterator<TEntity>(query,requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(partitionKey) });
while (resultSetIterator.HasMoreResults)
{
      var response = await resultSetIterator.ReadNextAsync();
      results.AddRange(response);
      if (response.Diagnostics != null)
      {
           _logger.LogTrace($"\nQueryWithsqlParameters Diagnostics: {response.Diagnostics}");
      }
}

return results;

解决方法

删除,requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(partitionKey)

enter image description here

然后您将获得结果。使用时requestOptions中可能有问题。

var query = new QueryDefinition("SELECT DISTINCT * FROM c IN s.categories");
var results = new List<dynamic>();

var resultSetIterator = container.GetItemQueryIterator<dynamic>(query);
while (resultSetIterator.HasMoreResults)
{
    var response = await resultSetIterator.ReadNextAsync();
    results.AddRange(response);
    if (response.Diagnostics != null)
    {
        Console.WriteLine($"\nQueryWithSqlParameters Diagnostics: {response.Diagnostics}");
    }
}