我必须根据另一个 cosmosDB 集合中的列的值更新一个 cosmosDB 集合(让集合 1)(让集合 2)。集合 1 应该使用来自其他集合(如集合 3 和集合 4)的值进行更新。我曾尝试在 Collection-2 中编写后触发器,但在触发器内编写函数时卡住了。
请建议是否可以使用 CosmosDB 触发器或建议是否有任何替代方法可以实现此目的。
我为 cosmos DB 创建了一个新的触发函数。
我必须根据另一个 cosmosDB 集合中的列的值更新一个 cosmosDB 集合(让集合 1)(让集合 2)。集合 1 应该使用来自其他集合(如集合 3 和集合 4)的值进行更新。我曾尝试在 Collection-2 中编写后触发器,但在触发器内编写函数时卡住了。
请建议是否可以使用 CosmosDB 触发器或建议是否有任何替代方法可以实现此目的。
我为 cosmos DB 创建了一个新的触发函数。
据我所知,您只能在每个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。
我对集合 >>> 触发器和 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();
}