首页 > 解决方案 > Azure CosmosDB 查询资源管理器与数据资源管理器

问题描述

我正在对我的 CosmosDB 实例运行相同的查询(使用 SQL API):

SELECT c.partition, COUNT(1) AS total
FROM c 
WHERE c.system = "SF"
GROUP BY c.partition

我有点惊讶我从数据资源管理器中获得了预期的结果,而在查询资源管理器选项卡下我收到了400 Bad Request并带有以下消息:

{"code":400,"body":"{\"code\":\"BadRequest\",\"message\":\"Message: {\\"Errors\\":[\\"跨分区查询仅支持聚合的 'VALUE'。\\"]}\r\nActivityId: d8523615-c2ff-47cf-8102-5256237c7024, Microsoft.Azure.Documents.Common/2.7.0\"}","activityId":" d8523615-c2ff-47cf-8102-5256237c7024"}

我知道我可以使用第一个,但是当我尝试从逻辑应用程序运行查询时会发生同样的异常:

在此处输入图像描述

所以问题很简单:该查询在语法上是否正确?

标签: azureazure-cosmosdbazure-logic-appsazure-cosmosdb-sqlapi

解决方案


根据您的要求,我认为我们可以尝试在您的逻辑应用程序中使用 azure 函数,而不是“查询文档 V2”操作。

这是我的功能代码:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;

namespace HuryCosmosFun
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            [CosmosDB(
                databaseName: "ToDoList", 
                collectionName: "Items", 
                SqlQuery = "SELECT c.partition, COUNT(1) AS total FROM c WHERE c.system = 'SF' GROUP BY c.partition", 
                ConnectionStringSetting = "CosmosDBConnection")]
                IEnumerable<ResultsClass> results,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");

                foreach (ResultsClass result in results)
                {
                    log.LogInformation(result.partition);
                    log.LogInformation(result.total.ToString());
                }
                return new OkResult();
            }
    }
}
namespace HuryCosmosFun
{
    public class ResultsClass
    {
        public string partition { get; set; }
        public int total { get; set; }
    }
}

有关上述代码的更多信息,您可以参考本教程

发布到 azure 后,我们可以在逻辑应用中创建一个 azure 函数,它将帮助我们进行 sql 操作。

顺便说一句,由于本教程提到 azure cosmos db sdk 已经支持“group by”。 在此处输入图像描述

我想我们也可以在 azure function 中编写代码,通过本文档中的 sdk 连接和查询 cosmos db ,然后在 logic app 中创建 azure function 作为第一个解决方案。

希望对您的需求有所帮助~


推荐阅读