Azure函数插入但不更新cosmosDB

2024-05-11

我有一个 azure 函数,从 Azure 服务总线队列接收消息并将文档发送到 cosmosDB。我正在使用 Azure 函数 1.x:

public static class Function1
{
    [FunctionName("Function1")]
    public static void Run([ServiceBusTrigger("ServiceBusQueue", AccessRights.Manage, Connection = "ServiceBusQueueConnection")]BrokeredMessage current, [DocumentDB(
            databaseName: "DBname",
            collectionName: "Colname",
            ConnectionStringSetting = "CosmosDBConnection")]out dynamic document, TraceWriter log)
    {
        document = current.GetBody<MyObject>(); 
        log.Info($"C# ServiceBus queue triggered function processed the message and sent to cosmos"); 
    }
}

这会成功插入到 cosmos,但是在更新时出现错误:

Microsoft.Azure.Documents.DocumentClintException: Entity with the specified id already exists in the system.

我试图更新的关键是该集合的分区键。

我看到这个问题:Azure 函数 C#:根据 HTTP 请求创建或替换 cosmos db 中的文档 https://stackoverflow.com/questions/52437913/azure-function-c-create-or-replace-document-in-cosmos-db-on-http-request但我的用法似乎与 Matias Quarantas 答案中的用法类似。他还提到使用 out 参数会导致 cosmos 上的更新插入。

如何创建这个“upsert”函数,同时仍然使用 azure 函数 1.x?


该绑定确实执行了更新插入操作。

我创建了这个示例函数,它接受 Http 负载 (JSON) 并将其按原样存储在 Cosmos DB 中:

[FunctionName("Function1")]
public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
   [DocumentDB("MyDb", "MyCollection", ConnectionStringSetting = "MyCosmosConnectionString")] out dynamic document,
   TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    dynamic data = req.Content.ReadAsAsync<object>().GetAwaiter().GetResult();
    document = data;

    return req.CreateResponse(HttpStatusCode.OK);
}

如果我将 JSON 负载发送到 Http 端点,输出绑定将按预期工作:

当我检查数据浏览器时,我看到:

如果我发送第二个有效负载,这次添加一个属性(相同的 ID):

数据浏览器显示文档已更新,具有相同的功能代码:

你可以添加完整的异常/错误跟踪?您的服务总线消息是否包含“id”?您的收藏是否已分区?

如果您的集合已分区并且您正在更改 Partition key 属性的值,则绑定不会更新现有文档,而是会创建一个新文档,因为 Upsert 操作不会找到现有文档(基于 id) /分区键)。但它不会抛出异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure函数插入但不更新cosmosDB 的相关文章

随机推荐