如果节点不存在,如何添加节点"



我正在尝试运行一些补丁操作:

ItemResponse<dynamic> response = await _container.PatchItemAsync<dynamic>(
id: loanParent.LoanNumber,
partitionKey: new PartitionKey(loanParent.LoanNumber),
patchOperations: new[] {
PatchOperation.Replace("/loandetails/loanname", loanParent.Loan.LoanDetails.LoanName),
PatchOperation.Replace("/loandetails/loandescription", loanParent.Loan.LoanDetails.LoanDescription)
}
);

然而,我得到了这个异常,因为这些节点还不存在。这是完整的文件:

{
"loannumber": "abc123",
"id": "abc123",
"participants": [
{
"firstname": "alex",
"lastname": "gordon"
},
{
"firstname": "liza",
"lastname": "gordon"
}
],
"_rid": "1sAyAggggggA==",
"_self": "dbs/1sAyAA=gggggAAAAAAAA==/",
"_etag": ""d900c069-0000-4440-0000-63642d840000"",
"_attachments": "attachments/",
"_ts": 1ddd636
}

Microsoft.Azure.Cosmos.CosmosException:响应状态代码不指示成功:BadRequest(400(;子状态:0;活动ID:a6ab67d6-f73e-4b3c-b03e-d9b6c54dba;原因:(消息:{quot;Errors":〔quot;For Operation(1(:Given Operation只能创建现有节点(数组或对象(的子对象,不能递归创建路径,在"loandetails"之外找不到路径。了解详细信息:https://aka.ms/cosmosdbpatchdocs"]}

如果节点结构不存在,我们如何创建它

Patch适用于现有文档,在执行任何操作(如添加、删除、替换、设置和增量(之前,您需要确保对象存在。

在这种情况下,首先可以使用Add运算符创建loandetails,然后可以执行后续操作

对于其他在意识到PatchOperation.Replace在字段不存在时抛出错误并希望添加或替换字段(也称为追加(后来到这里的人。

好的新方法是,它们的追加启动等价物是Add操作(也称为PatchOperation.Add(,它将像任何好的小追加启动一样正确地添加或替换字段值。

这里有一些git讨论提到了这一点,不像他们的文档那样毫无帮助:https://github.com/AzureCosmosDB/PatchPrivatePreviewFeedbackGroup/issues/2

最新更新