1

我正在使用 Azure Functions 和 Cosmos DB SQL 来使用 javascript 创建一个无服务器应用程序。

我有以下user项目的数据库架构:

{
    "id": "user_id_2",
    "username": "username_2",
    "pass": "pass_1",
    "feed": [],
    "followed": [
        "username_1",
        "username_3",
        "username_4"
    ],
    "followers": [
        "username_3",
        "username_4"
    ]
}

目前,当 user_1 跟随另一个 user_2 时,我会更新 user_1 的数据库文档 - 没问题。但现在我还需要更新 user_2 的文档,尤其是字符串数组 - followers。如何通过带有绑定的天蓝色函数来做到这一点?我想出的唯一方法是在数据库中查询整个文档,在客户端对其进行更新,然后将其放回数据库中,覆盖以前的文档。然而,这似乎很荒谬……

4

1 回答 1

1

Cosmos DB 目前不支持部分更新,因此拉取文档,将项目添加到数组中,然后执行 PUT 是唯一的选择。

话虽如此,您的数据设计的问题在于,followed并且followers无界数组,您的用户规模可以不受限制地增长。尺寸越大,需要的 RU 操作就越多。

请参阅何时不在这里嵌入https://docs.microsoft.com/azure/cosmos-db/modeling-data#when-not-to-embed

我在创建社交应用程序时为社交应用程序写了一个设计文档:https ://docs.microsoft.com/azure/cosmos-db/social-media-apps

理想情况下,A 跟随 B 的关系将是它自己的文档。您可以将它们存储在 Graph 帐户中以获得最佳性能,因为您在这里真正构建的是一个图,并且您将运行的查询是“谁关注 B?” 或“谁追随我的追随者?”。

于 2019-10-23T19:26:49.343 回答