当前位置: 首页 > 知识库问答 >
问题:

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

柳高卓
2023-03-14

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

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

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

该文档将看起来像这样:

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

上传此文档后,我希望触发一个触发器,将此新用户评分文档作为输入,能够从项目集合中检索相关文档,转换项目基于新数据的文档。

我的问题的关键是:如何在一个函数应用程序中触发一个文档的插入,以及如何从另一个集合中检索和修改一个文档?

我已经研究了以下链接,这些链接嘲笑了在CosmosDB上可以使用触发器的想法,但该表表明我们不能将触发器连接到文档数据库上传。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),这可以启动此处理本身,但如果可能的话,我喜欢无服务器功能应用程序的简单性。

共有2个答案

陆卓
2023-03-14

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

更改源就是为这种情况而构建的。

在今天的Azure门户中,CosmosDB刀片中甚至有一个菜单选项,允许您根据一个集合中的更改创建和触发功能,从而允许您检测和响应更改-即在另一个集合创建文档。

屠瑞
2023-03-14

操作的范围是集合。您不能从集合A中的事件触发集合B中的操作。

您要么需要在您的应用程序层中实现这一点(如您所建议的),要么...将两种类型的文档存储在同一个集合中(常见的情况)。您可能需要添加某种类型的doctype属性来帮助过滤您的查询,但是因为文档是与模式无关的,所以您可以在同一个集合中存储不同种类的文档。

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

 类似资料:
  • 尝试使用REST API创建文档时,出现以下错误: 在各种SDK中,有一个可选参数要包含,,如果设置为则如果未提供ID,将拒绝带有此错误的请求。我提出了一个非常简单的REST请求,所以我自己没有添加这个参数(我甚至不知道我会添加什么头——大概是头——因为RESTAPI的文档没有涵盖它)。 唯一需要注意的是,集合有一个定义的分区键。我找不到任何文档说如果定义了分区键就需要一个ID,但是情况似乎就是这

  • 我想创建一个Azure函数,它接受传递给它的JSON主体,并将该文档插入到Azure COSMOSDB实例中。 并按如下方式实现该函数: 在门户中,我放入了一个简单的示例文档:

  • 我已经创建了一个azure函数,当一个新文档被添加到一个集合中时,它会被触发。 是否可以从该集合中选择特定文档,然后查询所选文档中的数据? 例如,在所谓的募集服装,我有一个文件,有一个ID: 12345Tops.我想查询ID为:12345Tops的文档中找到的数据。 或者检索集合中的第一个文档,然后查询第一个选定文档 我看过带有http触发器的azure函数:https://docs.micros

  • 如何在Cloud Firestore中查询每个CollectionGroup的最新文档? 组中每个收藏中只有一个文档,最近的!

  • 是否可以将在集群节点上运行的服务注册为观察者,以便在th集群中跨多个cosmos db帐户为文档集合更改提要? https://docs.microsoft.com/en-us/azure/cosmos-db/serverless-computing-database 如何通过changefeed处理器库触发服务APIendpoint?或者,如何将集群节点上运行的服务注册为观察者,以便跨集群中的多

  • 我不知道如何监听Firestore db中的更改和更新中的项。 其中包括聊天模型、活动和适配器。 一旦值“isseen”更改为“true”,它就应该显示在发件人的电话上。