我必须根据另一个cosmosDB Collection(请设为collection-2)中列的值来更新cosmosDB Collection(请设为collection-1)。应当使用其他集合(如collection-3和collection-4)中的值更新collection-1。我曾尝试在Collection-2中编写后触发器,但是在触发器中编写函数时卡住了。
请建议是否可以使用CosmosDB Trigger或建议是否还有其他方法来实现此目的。
我为cosmos DB创建了一个新的触发函数。
答案 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();
}