gpt4 book ai didi

c# - IDocumentClient.UpsertDocumentAsync 不更新,它插入重复的 id

转载 作者:行者123 更新时间:2023-11-30 19:23:28 26 4
gpt4 key购买 nike

我有一个 C# 版本的 VS2017 解决方案,我正在使用 IDocumentClient.UpsertDocumentAsync 将一些文档更新插入到我的 cosmosdb documentdb 集合中。但我注意到它实际上是在创建具有相同 id 的新文档,而集合中已经存在具有该 id 的文档。

现在,在更新插入具有相同 id 的新文档后,查询结果如下所示:

select * from c where c.id = "aaaa-bbbb-cccc"

[
{
"id": "aaaa-bbbb-cccc",
"firstname": "john",
"lastname": "doe"
},
{
"id": "aaaa-bbbb-cccc",
"firstname": "john",
"lastname": "doe",
"age": "35"
}
]

我对这种行为很困惑;也许我没有正确理解“upsert”的定义。如果有人能为我澄清这一点,我将不胜感激。

最佳答案

在 Cosmos DB 中,“id”不是唯一值。相反,它是唯一的分区键(在您的情况下为“age”)和“id”的组合。 Cosmos DB 允许分区键不存在(因为它对架构比较宽松),并将缺失的分区键值视为特殊值(=“未定义”)。分区键值也是不可变的 - 要更改这些值,您需要删除/插入。

因此,在本例中,您有两个文档,一个包含 [age="35", "aaaa-bbbb-cccc"],另一个包含 [age=undefined, "aaaa -bbbb-cccc"] 由 upsert 调用创建。如果您将 upsert 调用更改为替换,您将收到 NotFound 错误。

关于c# - IDocumentClient.UpsertDocumentAsync 不更新,它插入重复的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48776123/

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