在变更供稿上使用功能触发器时,如何获取cosmos DB文档中的数据

时间:2018-09-27 03:32:44

标签: azure azure-functions azure-cosmosdb

我正在使用azure函数cosmos DB触发器V1尝试基于某些值解析文档以采取一些措施,但是由于某种原因,我在如何从文档中读取属性方面感到很挣扎。我正在阅读此页面以尝试理解它,但无法使其正常工作。

Documentation for trigger function

我创建了这个示例类,它被命中并很好地接收了更改提要,但是我没有进入if子句,因为我没有正确读取该属性,而且我真的没有看到如何使用此方法更深入地了解JSON。

 public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([CosmosDBTrigger(
            databaseName: "XXX",
            collectionName: "XXX",
            ConnectionStringSetting = "CosmosDb",
            LeaseCollectionName = "leases", LeaseCollectionPrefix = "local")]IReadOnlyList<Document> documents, TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.Info("Documents modified " + documents.Count);
                log.Info("First document Id " + documents[0].Id);

                foreach(var document in documents)
                {
                    if(document.GetPropertyValue<string>("sourceSystem") == "YYYY")
                    {
                        log.Info("sourceSystem = YYYY");
                    }
                }

            }
        }
    }

当文档嵌套在JSON数组深处时,如何从文档中读取数据?我对getPropertyValue有点困惑,因为反对使用linq或类似的语法来解析JSON,如何从文档中获取我的值?

1 个答案:

答案 0 :(得分:0)

JSON文件被解析为文档对象,该文档对象提供方法GetPropertyValue<T>(string propertyName)。我们可以使用此方法搜索JSON文件的第一级。为了更深入,我们需要适当地解析JSON属性。

例如,要读取此文件。

{
    "id": "test1",
    "myJarray": [
        {
            "mydata1": "testout",
            "mydata2": "testout"
        }
    ]
}

使用JArray进入内部。

foreach (var document in documents)
{
    var array = document.GetPropertyValue<JArray>("myJarray");
    if (array != null)
    {
        var data = ((JObject)array[0]).GetValue("mydata1");
        if (data != null)
        {
            log.Info(data.ToString());
        }
    }
}