我已经创建了一个azure函数,当一个新文档被添加到一个集合中时,它会被触发。
public static void Run(IReadOnlyList<Document> input, ILogger log)
{
if (input != null && input.Count > 0)
{
log.LogInformation("Documents modified " + input.Count);
log.LogInformation("First document Id " + input[0].Id);
}}
是否可以从该集合中选择特定文档,然后查询所选文档中的数据?
例如,在所谓的募集服装,我有一个文件,有一个ID: 12345Tops.我想查询ID为:12345Tops的文档中找到的数据。
或者检索集合中的第一个文档,然后查询第一个选定文档
我看过带有http触发器的azure函数:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb#trigger---属性
但是我需要使用cosmosdb触发器,因为当文档被添加到集合中时需要触发它。
我认为你不必调用CosmosDb来从CosmosDb触发器中检索完整的文档。
您应该能够获取json并反序列化为所需的类型。请参阅下面的示例函数。
只需执行ToString()即可从传递给函数的文档列表中提取文档内容。或者可以直接将json反序列化为现有的对象。
public static class CosmosDbAuditFunction
{
[FunctionName("CosmosDbAuditFunction")]
public static void Run([CosmosDBTrigger(
databaseName: "DBNAME",
collectionName: "COLLECTIONNAME",
ConnectionStringSetting = "CosmosDbConnectionString",
LeaseCollectionName = "LeaseCollection",
CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> input, ILogger log)
{
if (input != null && input.Count > 0)
{
var changedDocumentjson = input[0].ToString();
}
}
}
如果我理解正确,您希望根据第一个集合上发生的更改查询第二个集合上的文档?
这当然是可行的,您需要使用Cosmos DB输入绑定并拉取DocumentClient
实例。
代码看起来像:
[FunctionName("CosmosTrigger")]
public static void Run([CosmosDBTrigger(
databaseName: "ToDoItems",
collectionName: "Items",
ConnectionStringSetting = "CosmosDBConnection",
LeaseCollectionName = "leases",
CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
[CosmosDB(
databaseName: "ToDoItems",
collectionName: "CollectionToQuery",
ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
ILogger log)
{
foreach (var documentInsertedOrUpdated in documents)
{
try
{
// Do a read document on another collection
var otherDocument = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri("ToDoItems", "CollectionToQuery", "some-id-maybe-taking-it-from-the-documentInsertedOrUpdated"));
}
catch(Exception ex)
{
log.LogError(ex, "Failed to process document");
}
}
}
我们正在将数据从物联网设备发送到Azure物联网中心,并尝试将特定类型的消息传递给Azure功能。 目前,我们通过创建Azure Service Busendpoint并在IoTHub中创建消息路由实现了这一点。它按预期工作,Azure函数正确接收消息。 现在,我们想在Azure功能中从IoT Hub获取DeviceId,以及在Device Twin中定义的标签,我完全不知道如何做到这一点。 如果
我有一个blob触发器Azure函数,每次将新文件添加到我的blob存储时都会调用该函数。我自动获取该文件的名称作为输入。除了名称之外,我还需要附加到给定文件的元数据。我一直在研究数据输入绑定,但我无法理解它。我需要做些什么才能将文件元数据作为输入?或者,甚至只是在我的函数中访问它?
我将JSON文档上传到Azure Blob容器中,并编写了Azure Python函数将JSON写入CosmosDB。触发工作正常,但我出错了。下面是Python函数: 以下是function.json文件: 这是我在Azure门户中看到的错误: 结果:失败异常:函数加载错误:无法加载JsonBobTrigger1函数:以下参数在Python中声明,但在function.json中没有声明:{'d
我对Typescript和CosmosDB是新手,这可能是一个相当愚蠢的问题,然而,我在网上搜索了一整天,也找不到适合我的解决方案。希望有人愿意帮忙。 select似乎不是typescript中定义的函数,有人能帮忙吗?
下面是我的function.json 有什么想法可以摆脱这个“exception:attributeError:module'azure.functions'没有属性'in'”错误吗?
我对azure非常陌生,正在努力处理eventGrid中的python函数触发器。我正在使用从azure为python创建的现成模板,并出现错误。我将共享这些文件。 (init.py) function.json 主机. json 这是我发送给事件网格的数据集 我得到的错误是 也许在上面的某个地方很容易出错,但我找不到。。 提前感谢!