我有一个场景,其中我们将项保存在一个documentDb集合中,例如在/items/{documentId}下面。该文件看起来类似于:
{
id: [guid],
rating: 5,
numReviews: 1
}我在/user-reviews/{userIdAsPartitionKey}/{documentId}下有第二个文档集合
该文件将如下所示:
{
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 ),这可以启动这个处理本身,但如果可能的话,我喜欢无服务器函数应用程序的简单性。
发布于 2017-07-09 23:12:05
操作的作用域为集合。不能从集合A中的事件触发集合B中的操作。
您要么需要在应用程序层(如您建议的那样)实现这一点,要么.将两种类型的文档存储在相同的集合中(常见场景)。您可能需要添加某种类型的doctype属性来帮助筛选查询,但是由于文档是无模式的,所以可以将异构文档存储在同一个集合中。
还有:你提到了Azure函数。在一个函数中,没有什么可以阻止您进行多个数据库调用(例如,当集合a中发生一些事情并导致调用您的函数时,您的函数可以在集合b中执行一个操作)。请注意,这不会是事务性的。
发布于 2019-10-04 13:47:51
我知道这是个很老的问题。
改变进给正是为这种情况而构建的。
在今天的Azure中,CosmosDB刀片中甚至有一个菜单选项,它允许您根据一个集合中的更改创建和触发函数,它允许您检测更改并对更改作出反应,即在另一个集合中创建文档。
https://stackoverflow.com/questions/45001683
复制相似问题