gpt4 book ai didi

azure - 仅更新插入更改/新字段?

转载 作者:行者123 更新时间:2023-12-02 07:36:48 24 4
gpt4 key购买 nike

我的用户结构如下,存储在 azure cosmos db 中:

{id:字符串,评论历史:[]}

当请求用户时,我会进行更新插入,传递用户 ID,这就是我所拥有的:

string requestBody = new StreamReader(req.Body).ReadToEnd();
var toUpsert = JsonConvert.DeserializeObject<dynamic>(requestBody);

var cosmos = Config.Cosmos.Get;
var media = await cosmos.GetCollection("users");

ResourceResponse<Document> result = await cosmos.UpsertDocument(Config.Cosmos.Keys.Collections.MediaCollection, toUpsert);
return result.Resource;

这似乎也是删除 commentHistory。

如果文档不存在,是否可以进行更新插入并仅在 id 上进行插入?

最佳答案

Cosmos DB 不允许部分更新,因此在您的情况下,您需要:

  1. 阅读当前文档。
  2. 如果没有,则创建一个新对象。
  3. 添加新的历史记录项。
  4. 调用更新插入。

不过似乎存在设计问题。您的 commentHistory 属性似乎是无限的(可能会无限增长),这将使后续操作的 RU 成本更高(因为文档不断变得越来越大),并且在某些时候,它可能会达到当前文档大小限制 (2Mb)。

另一种替代方法是为每个评论历史记录事件保留一个文档,并添加一个属性作为 userId

在这种情况下,如果出现新的评论历史记录事件,您始终只需执行 CreateDocumentAsync 并且不会出现任何无限制的问题。如果您想获取特定用户的所有评论历史,可以查询特定userId的评论历史文档。

关于azure - 仅更新插入更改/新字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com