首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次创建CosmosDB文档并在第二个集合中更新文档时运行Azure函数应用程序

每次创建CosmosDB文档并在第二个集合中更新文档时运行Azure函数应用程序
EN

Stack Overflow用户
提问于 2017-07-09 22:33:07
回答 2查看 680关注 0票数 3

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

代码语言:javascript
复制
{
    id: [guid],
    rating: 5,
    numReviews: 1
}

我在/user-reviews/{userIdAsPartitionKey}/{documentId}下有第二个文档集合

该文件将如下所示:

代码语言:javascript
复制
{
    id: [guid],
    itemId: [guidFromItemsCollection],
    userId: [userId],
    rating: 4
}

上传此文档后,我希望触发一个触发器,该触发器以这个新的用户评等文档为输入,能够从items集合中检索相关文档,并根据新数据转换items文档。

问题的症结在于:如何触发文档重新插入,以及如何从其他集合中检索和修改文档,所有这些都在功能应用程序中?

我研究了以下链接,这些链接嘲弄了在CosmosDB上可以使用触发器的想法,但表表明我们不能将触发器连接到DB上传文档中。https://learn.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-documentdb

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

EN

回答 2

Stack Overflow用户

发布于 2017-07-09 23:12:05

操作的作用域为集合。不能从集合A中的事件触发集合B中的操作。

您要么需要在应用程序层(如您建议的那样)实现这一点,要么.将两种类型的文档存储在相同的集合中(常见场景)。您可能需要添加某种类型的doctype属性来帮助筛选查询,但是由于文档是无模式的,所以可以将异构文档存储在同一个集合中。

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

票数 2
EN

Stack Overflow用户

发布于 2019-10-04 13:47:51

我知道这是个很老的问题。

改变进给正是为这种情况而构建的。

在今天的Azure中,CosmosDB刀片中甚至有一个菜单选项,它允许您根据一个集合中的更改创建和触发函数,它允许您检测更改并对更改作出反应,即在另一个集合中创建文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45001683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档