Azure functions 针对Cosmos Db DocumentClient的Azure Function V2

Azure functions 针对Cosmos Db DocumentClient的Azure Function V2,azure-functions,azure-cosmosdb,Azure Functions,Azure Cosmosdb,我需要编写一个Azure函数,该函数使用Azure函数的版本2针对Cosmos DB数据库返回数据。然而,我很难找到任何关于如何做到这一点的好例子。我可以找到非常基本的例子,涉及搜索一个id 我希望能够向azure函数发送一些要查询的字段。例如“Likes”和“City”在分区内和分区外都有。我希望它将所有记录作为json文档返回 Cosmos DB Json文档示例 { “id”:“46465464565455566546bddgd” “姓名”:“斯科特·史密斯” “城市”:“斯科茨代尔” “

我需要编写一个Azure函数,该函数使用Azure函数的版本2针对Cosmos DB数据库返回数据。然而,我很难找到任何关于如何做到这一点的好例子。我可以找到非常基本的例子,涉及搜索一个id

我希望能够向azure函数发送一些要查询的字段。例如“Likes”和“City”在分区内和分区外都有。我希望它将所有记录作为json文档返回

Cosmos DB Json文档示例

{
“id”:“46465464565455566546bddgd”
“姓名”:“斯科特·史密斯”
“城市”:“斯科茨代尔”
“_pk”:“56”

到目前为止我的代码

`
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

using Newtonsoft.Json;
命名空间csharp { 公共静态类GetData {

私有静态只读字符串CosmosDbApiKey=Environment.GetEnvironmentVariable(“CosmosDbApiKey”);
私有静态只读字符串CosmosDbUri=Environment.GetEnvironmentVariable(“CosmosDbUri”);
私有静态只读DocumentClient DocumentClient=新DocumentClient(新Uri(CosmosDbUri),cosmosdbabikey);
[FunctionName(nameof(GetData))]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,Route=“api/data/getdata/{city}{likes},{u pk}”)]HttpRequest请求,
字符串城市,
字符串喜欢,
字符串_pk,
TraceWriter日志)
{
结果;
尝试
{
var Options=newrequestoptions(){PartitionKey=new PartitionKey(_pk)};
var Sql=“SELECT*FROM c”,其中c.name={name};
var Uri=UriFactory.CreateDocumentCollectionUri(“meddb”、“medcol”);
var documentUri=DocumentClient.CreateDocumentQuery(Uri、Sql、选项);
ResourceResponse document=await DocumentClient.ReadDocumentSync(documentUri);
结果=新的OkObjectResult(
序列化对象(document.Resource,Formatting.Indented)
);
}
捕获(例外e)
{
日志错误(e.Message,e);
结果=新的BadRequestObjectResult(e);
}
返回结果;
}
}
}
`
我将非常感谢任何帮助!我遇到的问题是在“尝试”部分之后。或者如果有更好的方法,我也很乐意


谢谢!

将函数连接到Cosmos DB的标准方法是使用。有关安装说明,请参阅该文章

您还可以从中获取
DocumentClient
的实例以执行自定义查询。在函数配方中可以找到几个使用绑定的示例:(它们用于v1,所以仍然是
DocumentDB

您的代码如下所示:

[FunctionName(nameof(GetData))]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,Route=“api/data/getdata/{city}{likes},{u pk}”)]HttpRequest请求,
[CosmosDB(“测试”、“测试”、连接字符串设置=“CosmosDB”)]DocumentClient,
字符串城市,
字符串喜欢,
字符串_pk,
TraceWriter日志)
方法的实现不应该有所不同,也不是真正特定于函数


另外,您没有提到任何具体的问题,但是如果您在编写正确的查询时遇到困难,请使用较小的代码示例(仅使用Cosmos DB代码)和准确的问题陈述提出新问题。

将函数连接到Cosmos DB的标准方法是使用。有关安装说明,请参阅该文章

您还可以从中获取
DocumentClient
的实例以执行自定义查询。在函数配方中可以找到几个使用绑定的示例:(它们用于v1,所以仍然是
DocumentDB

您的代码如下所示:

[FunctionName(nameof(GetData))]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,Route=“api/data/getdata/{city}{likes},{u pk}”)]HttpRequest请求,
[CosmosDB(“测试”、“测试”、连接字符串设置=“CosmosDB”)]DocumentClient,
字符串城市,
字符串喜欢,
字符串_pk,
TraceWriter日志)
方法的实现不应该有所不同,也不是真正特定于函数


另外,您没有提到任何具体的问题,但是如果您在编写正确的查询时遇到问题,请使用较小的代码样本(仅使用Cosmos DB代码)和准确的问题陈述来提出新问题。

我使用此方法时会出错。它会不断告诉我在"…日志)。我也试过这个例子。我认为问题出在函数的第2版中,事情的处理方式有所不同。我希望在第2版中得到一个很好的工作解决方案示例。我在原始示例中遇到错误,无法使用sql。我错过了关闭
,现在修复了我在使用此函数时遇到的错误。它告诉我我需要一个“)”后"…日志)。我也试过这个例子。我认为问题出在函数的第2版中,处理方式有所不同。我希望在第2版中得到一个很好的工作解决方案示例。我在原始示例中遇到错误,无法使用sql。我错过了关闭
,现在修复了您使用的是什么数据库?Mongo,Graph AP一、 表存储?我使用的是dot net SQL API您使用的是什么数据库?Mongo、Graph API、表存储?我使用的是dot net SQL API
    private static readonly string CosmosDbApiKey = Environment.GetEnvironmentVariable("CosmosDbApiKey");
    private static readonly string CosmosDbUri = Environment.GetEnvironmentVariable("CosmosDbUri");
    private static readonly DocumentClient DocumentClient = new DocumentClient(new Uri(CosmosDbUri), CosmosDbApiKey);


    [FunctionName(nameof(GetData))]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "api/data/getdata/{city}{likes},{_pk}")]HttpRequest req,
        string city,
        string likes,
        string _pk,
        TraceWriter log)
    {

        IActionResult result;

        try
        {

            var Options = new RequestOptions() { PartitionKey = new PartitionKey(_pk) };
            var Sql = "SELECT * FROM c" WHERE c.name={name};

            var Uri = UriFactory.CreateDocumentCollectionUri("meddb", "medcol");
            var documentUri = DocumentClient.CreateDocumentQuery(Uri, Sql, Options);
            ResourceResponse<Document> document = await DocumentClient.ReadDocumentAsync(documentUri);


            result = new OkObjectResult(
                JsonConvert.SerializeObject(document.Resource, Formatting.Indented)
            );
        }
        catch (Exception e)
        {
            log.Error(e.Message, e);
            result = new BadRequestObjectResult(e);
        }

        return result;
    }
}
}
  `