gpt4 book ai didi

node.js - azure cosmosdb 中的更新插入功能

转载 作者:行者123 更新时间:2023-12-03 05:12:04 25 4
gpt4 key购买 nike

有人可以向我解释一下 upsert 方法背后的逻辑吗,因为我来自 SQL 世界,我不太明白为什么它没有按预期工作。

假设我有一个名为“产品”的容器。我将分区键设置为“category_id”。我还将唯一键设置为“sku”。

然后我想用container.items.upsert()方法存储这个对象:

const product= { sku: 1, name: "MyAwesomeProduct", category_id: 100 }

使用 upsert 的第一次迭代效果很好。现在,如果我想“插入或更新”产品并说我只需再次添加此产品,但将“name”的值更改为“UpdatedAwesomeProduct”并尝试更新插入它,Azure 将返回一个错误,指出具有相同内容的项目 key 已经存在。我只是想更新它的名字。是否需要先查询带有sku的商品,然后再决定是否单独创建或更新?

最佳答案

关键是首先了解什么是商品标识

在 Cosmos DB 中,项目标识是 id 和分区键。

如果我更新插入具有 id A 和分区键 X 的项目,并且之前不存在具有此 id 和分区的其他项目键,然后它将被创建。

如果我使用相同的 id 和分区键再次调用 Upsert 并进行其他一些属性更改,则该项目将被更新/替换。

在您的示例中,您的 product 没有 id,因此可能发生的情况是 id 自动生成为 指南。因此调用两次,将生成 2 个不同的项目

但是,您的第二次更新插入失败的原因是您的唯一 key 。唯一键约束意味着在一个分区键中,没有 2 个项目可以具有相同的唯一键值,因此在 category_id 100 中不能有 2 个项目带有 sku 1 的商品。由于您的 Upsert 未指定 id 并让它自动生成,因此它会尝试创建第二个文档,并且未通过唯一键违规。

关于node.js - azure cosmosdb 中的更新插入功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76237083/

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