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

Azure CosmosDB Trigger to update a Collection based on Value in another Collection

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

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

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

据我所知,您只能在每个 Azure Function CosmosDB Trigger.

中监视一个 cosmos db 集合的更新

也就是说,如果Collection-1的column updates是由Collection 2,3,4的updates决定的,你需要为此创建3个trigger。

在每个触发器中,请按照此document to configure the collection information and use Cosmos DB SDK替换特定文档。


更新答案:

完全同意@Matias Quaranta评论中的解释,你混淆了你提到的两种触发器here.As,当然,需要采用Azure Function Trigger。 Cosmos DB 触发器无法监视您收集的任何更新,它是被动触发的。

例如:

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

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

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

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

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

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();
}