重要
Azure DocumentDB 扩展目前处于预览阶段。 目前仅支持使用 旧进程内模型的 .NET 应用。
Azure Functions 中的 Azure DocumentDB 输入绑定允许你从数据库中检索一个或多个文档。 本文将解释如何配置和使用C#代码示例中的输入绑定,包括查询集合以及使用MongoDB客户端。
先决条件
Azure 订阅服务
- 如果没有 Azure 订阅,请创建 试用版
现有的 Azure DocumentDB 群集
Azure Functions .NET 8.0 project using legacy in-process worker model
Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.MongoNuGet 包
Example
本示例展示了HTTP请求的 GET 触发函数。 该函数随后使用输入绑定查询目标 Azure DocumentDB 集合,寻找符合过滤器 { "price": { "$gte": 150 }}的文档:
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 Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo;
using System.Collections.Generic;
using MongoDB.Bson;
public static class DocumentDBInput
{
[FunctionName(nameof(DocumentDBInput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = null)]
HttpRequest request,
[CosmosDBMongo(databaseName: "<database-name>",
collectionName: "<collection-name>",
ConnectionStringSetting = "<name-of-app-setting>",
QueryString = "{{ \"price\": {{ \"$gte\": 150 }} }}")]
IEnumerable<BsonDocument> documents,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB function queried a collection.");
return new OkObjectResult(documents);
}
}
或者,可以使用 C# 记录或类类型来表示从集合返回的文档:
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 Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo;
using System.Collections.Generic;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public static class DocumentDBInput
{
[FunctionName(nameof(DocumentDBInput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = null)]
HttpRequest request,
[CosmosDBMongo(databaseName: "<database-name>",
collectionName: "<collection-name>",
ConnectionStringSetting = "<name-of-app-setting>",
QueryString = "{{ \"price\": {{ \"$gte\": 150 }} }}")]
IEnumerable<ProductDocument> products,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB function queried a collection.");
return new OkObjectResult(products);
}
}
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 集群的应用设置或设置集合名称。 |
QueryString |
定义输入绑定从数据库返回文档使用的 Mongo 查询表达式。 查询支持 Azure Functions 绑定参数。 |
注释
QueryString为了满足 Azure 函数内置的参数绑定,参数需要用双卷括号来避开。 更多信息请参见 结合表达式和模式。
Usage
使用属性 CosmosDBMongo 从集合中检索一组文档:
[FunctionName(nameof(DocumentDBInput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = null)]
HttpRequest request,
[CosmosDBMongo(databaseName: "<database-name>",
collectionName: "<collection-name>",
ConnectionStringSetting = "<name-of-app-setting>")]
IEnumerable<BsonDocument> documents,
ILogger logger)
{
logger.LogInformation("C# Azure DocumentDB function queried a collection.");
return new OkObjectResult(documents);
}
或者,直接在函数代码中与 MongoDB 客户端 协作:
[FunctionName(nameof(DocumentDBInput))]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "GET", Route = null)]
HttpRequest request,
[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>");
BsonDocument filter = []; // Empty filter to get all documents
long count = await collection.CountDocumentsAsync(filter);
return new OkObjectResult(new
{
documentsInCollection = count
});
}