首页 文章

每次创建CosmosDB文档时运行Azure功能应用程序并更新第二个集合中的文档

提问于
浏览
2

我有一个场景,我们将项目保存在一个documentDb集合中,例如在 /items/{documentId} 下 . 该文件类似于:

{
    id: [guid],
    rating: 5,
    numReviews: 1
}

我在 /user-reviews/{userIdAsPartitionKey}/{documentId} 下有第二份文件集

该文件将如下所示:

{
    id: [guid],
    itemId: [guidFromItemsCollection],
    userId: [userId],
    rating: 4
}

在上传此文档时,我希望触发一个触发器,该触发器将此新用户评级文档作为输入,能够从 items 集合中检索相关文档,根据新数据转换 items 文档 .

我的问题的关键是:如何触发文档upsert,以及如何在Funciton应用程序中检索和修改来自其他集合的文档?


我've investigated the following links, which tease at the idea of Triggers being possible on the CosmosDB, but the table suggests we can'连接了一个触发器来记录数据库上传 . https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-documentdb

如果无法直接设置,我的假设是我应该有一个处理upsert的中间层服务(目前使用来自客户端的DocumentClient),这可以启动这个处理本身,但我喜欢无服务器功能应用程序的简单性,如果可能 .

1 回答

  • 2

    操作范围限定为集合 . 您无法从集合A中的事件触发集合B中的操作 .

    您需要在您的应用层(如您所建议)中实现此功能,或者......将两种类型的文档存储在同一个集合中(常见场景) . 您可能需要添加某种类型的doctype属性来帮助过滤查询,但由于文档是无模式的,因此您可以将异构文档存储在同一个集合中 .

    另外:您提到了Azure功能 . 在一个函数中,没有什么能阻止你进行多个数据库调用(例如,当集合a中发生某些事情并导致你的函数被调用时,你的函数可以在集合b中执行一个操作) . 请注意,这不是交易性的 .

相关问题