重要
Azure DocumentDB 扩展目前处于预览阶段。 目前仅支持使用 旧进程内模型的 .NET 应用。
Azure DocumentDB 的输出绑定允许你从你的 Azure Functions 中为 Azure DocumentDB 集合写入新文档。 本文将解释如何配置和使用输出绑定,包括编写文档到数据库的代码示例。
先决条件
Azure 订阅服务
- 如果没有 Azure 订阅,请创建 试用版
现有的 Azure DocumentDB 群集
- 如果没有群集,请 创建新群集
Azure Functions .NET 8.0 project using legacy in-process worker model
Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.MongoNuGet 包
Example
本示例展示了HTTP请求的 POST 触发函数。 请求在请求正文中获得期望 string 值。 然后输出绑定会将文档添加到集合中。
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo;
using MongoDB.Bson;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Mvc;
public static class DocumentDBOutput
{
[FunctionName(nameof(DocumentDBOutput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "POST", Route = null)]
string payload,
[CosmosDBMongo(databaseName: "<database-name>",
collectionName: "<collection-name>",
ConnectionStringSetting = "<name-of-app-setting>")]
IAsyncCollector<BsonDocument> collector,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB output function starting.");
BsonDocument document = new()
{
{ "message", payload },
{ "originator", nameof(DocumentDBOutput) },
{ "timestamp", BsonDateTime.Create(System.DateTime.UtcNow) }
};
await collector.AddAsync(document);
return new OkObjectResult("Document added successfully.");
}
}
或者,使用C#记录或类类型来表示添加到集合中的文档:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo;
using MongoDB.Bson;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Mvc;
using MongoDB.Bson.Serialization.Attributes;
public static class DocumentDBOutput
{
[FunctionName(nameof(DocumentDBOutput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "POST", Route = null)]
ProductDocument payload,
[CosmosDBMongo(databaseName: "<database-name>",
collectionName: "<collection-name>",
ConnectionStringSetting = "<name-of-app-setting>")]
IAsyncCollector<ProductDocument> collector,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB output function starting.");
await collector.AddAsync(payload);
return new OkObjectResult("Document added successfully.");
}
}
public sealed record ProductDocument(
[property: BsonId]
[property: BsonRepresentation(BsonType.ObjectId)] string id,
string name,
string category,
int quantity,
decimal price,
bool sale
);
特性
下表描述了属性的 CosmosDBMongoTrigger 绑定配置属性。
| 参数 | Description |
|---|---|
FunctionId |
(可选)触发器函数的 ID。 |
DatabaseName |
输出数据所针对的数据库名称。 |
CollectionName |
数据库中针对输出数据的集合名称。 |
ConnectionStringSetting |
指定如何连接到针对输出数据的Azure DocumentDB集群的应用设置或设置集合名称。 |
CreateIfNotExists |
(可选)当设置为 true时,如果目标集合还不存在,则会创建该集合。 |
Usage
使用属性 CosmosDBMongo 将一组文档插入可能不存在的集合中:
[FunctionName(nameof(DocumentDBOutput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "POST", Route = null)]
BsonDocument payload,
[CosmosDBMongo(databaseName: "<database-name>",
collectionName: "products",
ConnectionStringSetting = "<name-of-app-setting>",
CreateIfNotExists = true)]
IAsyncCollector<BsonDocument> collector,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB output function starting.");
await collector.AddAsync(payload);
return new OkObjectResult("Document added successfully.");
}
或者,直接在函数代码中与 MongoDB 客户端 协作:
[FunctionName(nameof(DocumentDBOutput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "POST", Route = null)]
BsonDocument payload,
[CosmosDBMongo(ConnectionStringSetting = "<name-of-app-setting>")]
IMongoClient client,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB function got a client.");
IMongoDatabase database = client.GetDatabase("<database-name>");
IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("<collection-name>");
await collection.InsertOneAsync(payload);
return new OkObjectResult("Document added successfully.");
}