Cosmos SQL 更新插入未按预期工作
Cosmos SQL upsert not working as expected
如果我尝试使用已存在的 ID 和分区键更新插入文档,如果容器上没有设置唯一约束,它会按预期工作。
但是,当我将 table 中的任何值设置为 Unique 时,upsert 不起作用并且我得到一个(409 冲突 - 一个 id 与文档的 id 字段匹配的文档已经存在).在这种情况下,Unique 约束应该不是问题,但它会导致此错误,该错误对 upsert 有一个奇怪的错误描述,因为 id 是否已经存在应该无关紧要。
我正在使用 documentClient.upsertDocument(collectionLink, documentDefinition, null, true);
。
Cosmos DB 的更新插入/替换流程基于文档的唯一标识符(id 和分区键值),唯一字段用于添加额外的数据验证检查。
当进行Upsert操作时,该服务会查找具有相同id和Partition Key值的现有文档,如果存在则更新它,否则将创建它。
在您的情况下,您总是发送一个新的随机 ID,因此 Upsert 没有找到要更新的现有文档,而是每次都创建一个新文档。
请在启动更新插入之前定义您自己的 ID,并将更新插入调用中的自动生成 ID 属性设置为其默认 (true) 值:client.upsertDocument(collectionLink, documentDefinition)
.
如果我尝试使用已存在的 ID 和分区键更新插入文档,如果容器上没有设置唯一约束,它会按预期工作。
但是,当我将 table 中的任何值设置为 Unique 时,upsert 不起作用并且我得到一个(409 冲突 - 一个 id 与文档的 id 字段匹配的文档已经存在).在这种情况下,Unique 约束应该不是问题,但它会导致此错误,该错误对 upsert 有一个奇怪的错误描述,因为 id 是否已经存在应该无关紧要。
我正在使用 documentClient.upsertDocument(collectionLink, documentDefinition, null, true);
。
Cosmos DB 的更新插入/替换流程基于文档的唯一标识符(id 和分区键值),唯一字段用于添加额外的数据验证检查。
当进行Upsert操作时,该服务会查找具有相同id和Partition Key值的现有文档,如果存在则更新它,否则将创建它。
在您的情况下,您总是发送一个新的随机 ID,因此 Upsert 没有找到要更新的现有文档,而是每次都创建一个新文档。
请在启动更新插入之前定义您自己的 ID,并将更新插入调用中的自动生成 ID 属性设置为其默认 (true) 值:client.upsertDocument(collectionLink, documentDefinition)
.