从Azure函数cosmosdb触发器中的集合中检索文档

时间:2019-03-14 15:38:38

标签: azure-functions azure-cosmosdb

我创建了一个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);
}}

是否可以从此集合中选择一个特定的文档,然后查询所选文档中的数据?

例如。在名为clothescollection的集合中,我有一个ID为:12345Tops的文档。我想查询ID为12345的文档中找到的数据。

或者检索集合中的第一个文档,然后查询所选的第一个文档

我使用http触发器查看过天蓝色函数:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb#trigger---attributes

但是我需要使用cosmosdb触发器,因为在将文档添加到集合时需要触发该操作。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您是否要根据第一个集合上发生的更改查询第二个集合上的文档?

那当然是可行的,您需要使用Cosmos DB Input Binding and pull the DocumentClient instance

代码类似于:

config.omniauth :instagram, ENV["INSTAGRAM_CLIENT_ID"], ENV["INSTAGRAM_CLIENT_SECRET"] 
# i had plain text instead of the env tags, but it made no difference

答案 1 :(得分:0)

我认为您不必致电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();               
        }
    }
}