就像 Azure COSMOS SDK 的 Upsert 操作一样,我们是否有 PATCH + INSERT 操作
Just like an Upsert operation from Azure COSMOS SDK, do we have PATCH + INSERT operation
现有文件
{
"property1" : "value1",
"property2" : "value2",
"property3" : "value3",
}
现在,“property2”需要更改为“newValue2”。
使用 UpsertItemAsync 方法,
Container.UpsertItemAsync<T>(T, Nullable<PartitionKey>, ItemRequestOptions, CancellationToken)
文档更新为
{
"property2" : "newValue2" //"property1" & "property3" are removed.
}
我想要的是
{
"property1" : "value1",
"property2" : "newValue2",
"property3" : "value3",
}
PatchItemAsync 有效
Container.PatchItemAsync<T>(String, PartitionKey, IReadOnlyList<PatchOperation>, PatchItemRequestOptions, CancellationToken)
但是 returns 404 NOT FOUND 如果文档不存在。
我的问题是,有什么方法可以执行 PATCH + INSERT 操作吗?
Microsoft.Azure.Cosmos (3.23.0)
至少从 docs 来看,Patch 端点似乎无法实现类似于 Upsert 的功能。
Cosmos 客户端似乎也不支持类似的东西。
如果您将它与 Create document operation 进行比较,它会提到一个 x-ms-documentdb-is-upsert
header,如果文档已经存在,它会成为一个更新插入。
您可以修补文档,如果由于文档不存在而失败,您可以创建它。
这确实使用了控制流的异常,所以我对它不是很满意:\
现有文件
{
"property1" : "value1",
"property2" : "value2",
"property3" : "value3",
}
现在,“property2”需要更改为“newValue2”。
使用 UpsertItemAsync 方法,
Container.UpsertItemAsync<T>(T, Nullable<PartitionKey>, ItemRequestOptions, CancellationToken)
文档更新为
{
"property2" : "newValue2" //"property1" & "property3" are removed.
}
我想要的是
{
"property1" : "value1",
"property2" : "newValue2",
"property3" : "value3",
}
PatchItemAsync 有效
Container.PatchItemAsync<T>(String, PartitionKey, IReadOnlyList<PatchOperation>, PatchItemRequestOptions, CancellationToken)
但是 returns 404 NOT FOUND 如果文档不存在。
我的问题是,有什么方法可以执行 PATCH + INSERT 操作吗?
Microsoft.Azure.Cosmos (3.23.0)
至少从 docs 来看,Patch 端点似乎无法实现类似于 Upsert 的功能。 Cosmos 客户端似乎也不支持类似的东西。
如果您将它与 Create document operation 进行比较,它会提到一个 x-ms-documentdb-is-upsert
header,如果文档已经存在,它会成为一个更新插入。
您可以修补文档,如果由于文档不存在而失败,您可以创建它。 这确实使用了控制流的异常,所以我对它不是很满意:\