具有Azure功能的DocumentDB

时间:2016-08-02 12:08:20

标签: c# azure azure-cosmosdb azure-functions

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

5 个答案:

答案 0 :(得分:4)

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

  • 创建新的Azure功能。
  • 转到“集成”选项卡。
  • 您可以选择Azure Document DB作为您的功能的输出。
  • 选择您要使用的文档数据库/数据库名称/集合。
  • 文档参数名称是函数的输出。

例如

<td>Cat</td>
   <td align="center">40</td>
   <td align="center">67</td>
   <td align="center">58<br>0</td>
   <td align="center">32</td>
<td>Dog</td>
   <td align="center">0</td>
   <td align="center">0</td>
   <td align="center">58<br>0</td>
   <td align="center">99</td>
<td>Snake</td>
   <td align="center">7</td>
   <td align="center">85</td>
   <td align="center">58<br>0</td>
   <td align="center">13</td>

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

答案 1 :(得分: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();
    ....
}

答案 2 :(得分: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

答案 3 :(得分: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 });

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

答案 4 :(得分:0)

假设C#具有类似Java的SDK。以下是针对Java

有两种方法可以从Azure函数连接到documentDB。

  1. 使用SDK

    DocumentClient documentClient =新的DocumentClient(                     “ SERVICE_ENDPOINT”,                     “主密钥”,                     ConnectionPolicy.GetDefault(),                     ConsistencyLevel.Session);

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

  1. 绑定

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

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

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

上面的链接也有C#示例。