twe*_*ypi 0 azure azure-cosmosdb
对于存储在 azure cosmos db 中的用户,我有以下结构:
{ id:string, commentHistory:[] }
在请求用户时,我执行了一个 upsert,将用户 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;
Run Code Online (Sandbox Code Playgroud)
这似乎也删除了 commentHistory。
如果文档不存在,是否可以进行 upsert 并仅在 id 上插入?
Cosmos DB 不允许部分更新,因此在您的情况下,您需要:
不过好像有设计问题。您的commentHistory属性似乎是无限的(可能无休止地增长),这将使后续操作更加昂贵,就 RU 而言(因为文档不断增长),并且在某些时候可能会达到当前的文档大小限制 (2Mb) .
另一种选择是为每个评论历史事件保留一个文档,并添加一个属性作为userId.
在这种情况下,如果出现新的评论历史事件,您将始终只执行 aCreateDocumentAsync并且不会有任何无限制的问题。如果您想获取特定用户的所有评论历史,您可以查询特定userId.
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |