Azure CosmosDB触发器根据另一个集合中的值更新集合

时间:2019-06-03 06:34:48

标签: azure azure-functions azure-cosmosdb azure-cosmosdb-sqlapi azure-triggers

我必须根据另一个cosmosDB Collection(请设为collection-2)中列的值来更新cosmosDB Collection(请设为collection-1)。应当使用其他集合(如collection-3和collection-4)中的值更新collection-1。我曾尝试在Collection-2中编写后触发器,但是在触发器中编写函数时卡住了。

请建议是否可以使用CosmosDB Trigger或建议是否还有其他方法来实现此目的。

我为cosmos DB创建了一个新的触发函数。

2 个答案:

答案 0 :(得分:1)

据我所知,您只能监视每个Azure Function CosmosDB Trigger中一个cosmos db集合的更新。

换句话说,如果Collection-1中的列更新是由Collection 2、3、4的更新确定的,则需要为此创建3个触发器。

在每个触发器中,请遵循以下document来配置收集信息,并使用Cosmos DB SDK来替换特定文档。


更新答案

完全同意@Matias Quaranta的注释中的解释,您在这里混淆了这两种触发器。正如您提到的那样,当然需要采用“天蓝色”功能触发器。 Cosmos DB触发器无法监视您收集的任何更新,它是被动触发的。

例如:

如果要在将文档插入cosmos db中之前添加一列,则可以设置触发器名称以在使用插入文档cosmos db sdk时将其激活。这是在cosmos db下触发的。

如果要监视cosmos db集合的更新,然后再做一些业务,则需要采用Azure函数触发器。

答案 1 :(得分:0)

我对集合>>>触发器和Azure函数Cosmos DB Trigger感到困惑。 我上述问题的解决方案是创建一个Azure函数来触发cosmos DB。

创建资源>>>计算>>>函数应用程序。

要添加输入和输出,请从您创建的Function App >>>触发器中转到“集成”选项。

Refer the link for function binding:

此功能将触发单个cosmosDB集合中的数据更新。 我们可以将n个集合添加为输入,将一个集合添加为输出。

下面是在定义绑定时自动创建的function.json文件:

{
  "bindings": [
    {
      "type": "cosmosDBTrigger",
      "name": "documents",
      "direction": "in",
      "leaseCollectionName": "leases",
      "connectionStringSetting": "cosmosdb_DOCUMENTDB",
      "databaseName": "connectivityDB",
      "collectionName": "tblEvent",
      "createLeaseCollectionIfNotExists": true
    },
    {
      "type": "cosmosDB",
      "name": "outputDocument",
      "databaseName": "connectivityDB",
      "collectionName": "tblNewEvent",
      "createIfNotExists": true,
      "connectionStringSetting": "cosmosdb_DOCUMENTDB",
      "partitionKey": "/id",
      "direction": "out"
    }
  ]
}

下面是创建的index.js文件:

module.exports = function(context, input) {

     var documents = context.bindings.documents;
     var output = [];

     if(!!input && input.length > 0){

       //write your code here

     }

    context.bindings.outputDocument = output;
    context.done();
}