2

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

请建议是否可以使用 CosmosDB 触发器或建议是否有任何替代方法可以实现此目的。

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

4

2 回答 2

1

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

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

在每个触发器中,请按照此文档配置采集信息,并使用Cosmos DB SDK替换特定文档。


更新答案:

完全同意@Matias Quaranta评论中的解释,您在这里混淆了两种触发器。正如您所提到的,当然,需要采用Azure函数触发器。Cosmos DB 触发器无法监视您收集的任何更新,它是被动触发的。

例如:

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

如果你想监控你的 cosmos db 集合的更新,那么做一些业务,需要采用 Azure Function Trigger。

于 2019-06-03T07:07:06.297 回答
0

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

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

要添加输入和输出,请转到您创建的 Function App >>> Trigger 中的 Integrate 选项。

函数绑定参考链接:

此函数将触发单个 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();
}
于 2019-06-07T06:43:00.800 回答