我有一个JSON模式,其结构如下:
父1对多个集合1对多个任务。
我有下面的代码,它接受一个更新的任务(updatedTask),并使用PatchItemAsync函数尝试在分区中更新特定文档(由文档ID设置)。然而,由于我正在更新JSON文档中的孙子项(即任务),因此我还尝试从父级到集合(通过传递set id)进行钻取,然后更新适当的任务(通过设置任务id)。结果我得到了一个对象未设置错误。
大多数示例都显示使用索引进行钻取,但我不知道SET和TASK在哪里排序,但确实有它们的ID。
您有什么想法,我应该如何设置路径,以便可以使用新任务值替换当前任务?感谢您的协助和指导。
父1对多个集合1对多个任务。
我有下面的代码,它接受一个更新的任务(updatedTask),并使用PatchItemAsync函数尝试在分区中更新特定文档(由文档ID设置)。然而,由于我正在更新JSON文档中的孙子项(即任务),因此我还尝试从父级到集合(通过传递set id)进行钻取,然后更新适当的任务(通过设置任务id)。结果我得到了一个对象未设置错误。
大多数示例都显示使用索引进行钻取,但我不知道SET和TASK在哪里排序,但确实有它们的ID。
您有什么想法,我应该如何设置路径,以便可以使用新任务值替换当前任务?感谢您的协助和指导。
public async Task<string> UpdateIT(string docid, Task updatedTask, string path, string taskid, string setid)
{
try
{
PatchItemRequestOptions patchItemRequestOptions = new PatchItemRequestOptions
{
FilterPredicate = path
};
ItemResponse<IndividualTask> response = await container.PatchItemAsync<IndividualTask>
(id: docID, partitionKey: new Microsoft.Azure.Cosmos.PartitionKey(taskid), patchOperations: new[] { PatchOperation.Replace("/PARENT/SET/[?(@.SETID=='" + setid + "')]/TASK/[?(@. TASKID=='" + taskid + "'")], updatedIT) }, patchItemRequestOptions);
string status = response.StatusCode.ToString();
return status;
}
catch (Exception e)
{
return e.Message;
}
}
同时我已经提供了JSON模式。我正在尝试更新任务中的所有属性(即TaskID、TaskStatus、TaskTitle等)。
{
"PARENT": [
{
"_type": null,
"PARENTID": "GUID",
"PARENTTitle": null,
"PARENTDescription": null,
"SET": [
{
"SETID": "GUID",
"CreatedBy": "",
"CreatedDate": "0001-01-01T00:00:00",
"TASK": [
{
"TASKID": "GUID",
"TaskStatus": "",
"TaskTitle": "",
"TaskType": "",
"TaskDescription": "",
"TaskNotes": "",
"Priority": "Normal",
"CreatedBy": "",
"CreatedDate": "0001-01-01T00:00:00"
}
]
}
]
}
],
"CaseID": "GUID",
"TenantID": "testtenant0004",
"id": "GUID",
"TaskID": "GUID",