首页 文章

具有Azure功能的DocumentDB

提问于
浏览
2

我正在尝试连接Azure DocumentDB并使用Azure Functions保存文档,但我不知道如何创建连接 .

5 回答

  • 4

    假设C#具有类似Java的SDK . 以下是Java

    有两种方法可以从Azure功能连接到documentDB .

    • Using SDK

    DocumentClient documentClient = new DocumentClient(“SERVICE_ENDPOINT”,“MASTER_KEY”,ConnectionPolicy.GetDefault(),ConsistencyLevel.Session);

    参考 - [https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-java-samples][1] . 这也有.Net样本 .

    • Binding

    @FunctionName(“CosmosDBStore”)@CosmosDBOutput(name =“database”,databaseName =“db_name”,collectionName =“col_name”,connectionStringSetting =“AzureCosmosDBConnection”)

    请确保您的应用程序设置中名称为“AzureCosmosDBConnection”的变量和local.settings.json(如果您想在本地测试)

    参考 - [https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb-v2][1]

    以上链接也有C#示例 .

  • 0

    您可以使用Azure门户执行此操作 . 创建DocumentDB后 -

    • 创建新的Azure功能 .

    • 转到“集成”选项卡 .

    • 您可以选择Azure Document DB作为函数的输出 .

    • 选择要使用的文档数据库/数据库名称/集合 .

    • 文档参数名称是函数的输出 .

    例如

    using System;
    
    public static void Run(string input, out object document, TraceWriter log)
    {
        log.Info($"C# manually triggered function called with input: {input}");
        document = new {
            text = $"I'm running in a C# function! {input}"
        };
    }
    

    您需要提供与您在输出选项卡中定义的对象相同的对象 .

  • 1

    您可以直接使用文档客户端:

    var endpoint = "https://XXXXX.documents.azure.com:443/";
    var authKey = "XXXXX";
    
    using (var client = new DocumentClient(new Uri(endpoint), authKey))
    {
        var sqlCountQuery = "select value count(1) from c";
        IDocumentQuery<dynamic> query = client.CreateDocumentQuery<dynamic>(UriFactory.CreateDocumentCollectionUri("YOUR_DB_ID", "YOUR_COLLECTON_ID"), sqlCountQuery).AsDocumentQuery();
        ....
    }
    
  • 1

    Azure Functions支持文档DB(Cosmos DB)开箱即用 . 您只需在V1中添加一个名为 AzureWebJobsDocumentDBConnectionString 的环境变量,或在V2中添加 AzureWebJobsCosmosDBConnectionString .

    然后只需使用 CosmosDBTrigger 绑定属性进行输入绑定(例如在C#中):

    public static class UpsertProductCosmosDbTrigger
    {
        [FunctionName("ProductUpsertCosmosDbTrigger")]
        public static void Run(
            [CosmosDBTrigger(
            // Those names come from the application settings.
            // Those names can come with both preceding % and trailing %.
            databaseName: "CosmosDbDdatabaseName",
            collectionName: "CosmosDbCollectionName",
            LeaseDatabaseName = "CosmosDbDdatabaseName",
            LeaseCollectionName = "CosmosDbLeaseCollectionName")] 
            IReadOnlyList<Document> input,
    
            TraceWriter log)
    ...
    

    对于输出绑定,使用V1中的 DocumentDB 输出绑定属性和V2中的 CosmosDB

    [FunctionName("ProductUpsertHttpTrigger")]
    public static async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "products")] 
        HttpRequestMessage req,
    
        [DocumentDB(
        databaseName: "%CosmosDbDdatabaseName%",
        collectionName: "%CosmosDbCollectionName%")] IAsyncCollector<Product> collector,
    
        TraceWriter log)
    ...
    

    我写了一篇关于此的博文:https://blog.mexia.com.au/cosmos-db-in-azure-functions-v1-and-v2

  • 0
    var EndpointUrl = "EndpointUrl";
    var PrimaryKey = "PrimaryKeyValue" 
    this.client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
    Database database = await this.client.CreateDatabaseIfNotExistsAsync(new Database { Id = cosmoDbName });
    

    您可以从keys部分的azure门户获取End-point-URL和Primary-Key值 .

相关问题