gpt4 book ai didi

Azure Functions 使用 Binder 更新 DocumentDb 文档

转载 作者:行者123 更新时间:2023-12-01 09:48:58 25 4
gpt4 key购买 nike

我的 previous post 的后续问题关于 Azure 函数。我需要使用命令式 Binder (Binder)更新 DocumentDB 中的文档。我不太明白documentation我找不到任何示例(我或多或少找到了一种示例,即 TextWriter 示例)。文档说我可以绑定(bind)到“out T”,但我没有找到这样的例子。

在运行该函数之前假设文档如下所示:

{
child: {
value: 0
}
}

函数如下所示:

var document = await binder.BindAsync<dynamic>(new DocumentDBAttribute("myDB", "myCollection")
{
ConnectionStringSetting = "my_DOCUMENTDB",
Id = deviceId
});

log.Info($"C# Event Hub trigger function processed a message: document: { document }");

document.value = 100;
document.child.value = 200;

log.Info($"Updated document: { document }");

根据第二个日志行,文档未正确更新。子项不会更新(从存储中读取时存在)并且值会被添加。不管怎样,没有什么是持久的。我尝试在 function.json 中添加输出,但编译器对此有提示,并且文档指出您不应该有任何输出。

我错过了什么?

最佳答案

Mathew 的示例(使用 DocumentClient )有效,但我想澄清您可以使用 Binder 来实现的另一种方式。和输出绑定(bind)。

您遇到两个问题:

  1. Document每次请求子对象时,dynamic 的实现似乎都会返回一个新的对象实例。这与函数无关,但解释了原因 document.child.value = 200不起作用。您正在更新一个实际上未附加到文档的子实例。我将尝试与 DocumentDb 人员仔细检查这一点,但这很令人困惑。解决这个问题的一种方法是请求 JObject而不是dynamic 。我下面的代码就是这样做的。

  2. 正如@mathewc 指出的那样,Binder不自动更新文档。我们将在他提交的问题中跟踪这一点。相反,您可以使用 IAsyncCollector<dynamic> 的输出绑定(bind)更新文档。幕后我们会调用InsertOrReplaceDocumentAsync ,这将更新文档。

这是对我有用的完整示例:

代码:

#r "Microsoft.Azure.WebJobs.Extensions.DocumentDB"
#r "Newtonsoft.Json"

using System;
using Newtonsoft.Json.Linq;

public static async Task Run(string input, Binder binder, IAsyncCollector<dynamic> collector, TraceWriter log)
{
string deviceId = "0a3aa1ff-fc76-4bc9-9fe5-32871d5f451b";
dynamic document = await binder.BindAsync<JObject>(new DocumentDBAttribute("ItemDb", "ItemCollection")
{
ConnectionStringSetting = "brettsamfunc_DOCUMENTDB",
Id = deviceId
});

log.Info($"C# Event Hub trigger function processed a message: document: { document }");

document.value = 100;
document.child.value = 200;

await collector.AddAsync(document);
log.Info($"Updated document: { document }");
}

绑定(bind):

{
"type": "documentDB",
"name": "collector",
"connection": "brettsamfunc_DOCUMENTDB",
"direction": "out",
"databaseName": "ItemDb",
"collectionName": "ItemCollection",
"createIfNotExists": false
}

关于Azure Functions 使用 Binder 更新 DocumentDb 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com