我在bedbase 6.0.0实例中有一个自引用文档,该文档可以是任意数量的深度。
{
"branchEndDateTime": "2020-09-22 10:00 am",
"branchEndX": 0,
"branchId": "id-652c12fe-000e-4b42-a7e6-e4817d123456",
"branchName": "Root",
"branchStartDateTime": "1975-09-22 10:00 am",
"branchStartX": 0,
"children": [
{
"branchEndDateTime": "1984-09-22 10:00 am",
"branchEndX": 100,
"branchId": "id-15c1737f-1ab5-417e-b74c-14f3ee3f3461",
"branchName": "Test Child Level 1",
"branchStartDateTime": "1980-09-22 10:00 am",
"branchStartX": 0,
"children": [
{
"branchEndDateTime": "1984-09-22 10:00 am",
"branchEndX": 100,
"branchId": "id-15c1737f-1ab5-417e-b74c-14f3ee3f3467",
"branchName": "Test Child Level 2",
"branchStartDateTime": "1980-09-22 10:00 am",
"branchStartX": 0,
"children": [
{
"branchEndDateTime": "1984-09-22 10:00 am",
"branchEndX": 100,
"branchId": "id-15c1737f-1ab5-417e-b74c-14f3ee3fxxxx",
"branchName": "Test Child Level 3",
"branchStartDateTime": "1980-09-22 10:00 am",
"branchStartX": 0,
"children": [],
"type": "Branch"
}
],
"type": "Branch"
}
],
"type": "Branch"
}
],
"type": "Branch"
}
每个父对象都有一个子片段,每个片段都有一个ID branchId
"branchId": "id-15c1737f-1ab5-417e-b74c-14f3ee3f3461",
鉴于我知道分支ID,有什么方法可以更新子片段上的单个属性吗?
示例:考虑到我知道branchId为“ id-15c1737f-1ab5-417e-b74c-14f3ee3f3467”,我想将branchName“测试儿童2级”更改为“ Custardy内裤比赛”]
是否有解决此问题的优雅方法?
我已经尝试了以下方法,但是没有解决
UPDATE BucketName AS l
SET o.branchName ='Custardy underpants competition' FOR o IN l.children END
WHERE l.branchId = "id-15c1737f-1ab5-417e-b74c-14f3ee3f3467"
非常感谢!
匹配的branchId可以位于文档的根目录或子目录中。更新文档的根目录时,您必须使用d.branchName,即在以下SQL中先设置SET。Second SET会照顾所有孩子,无论其结构有多深(WITHIN)。
如果没有branchId,也永远不会使文档突变,那么您还需要WHERE子句WITHIN。
UPDATE default d
SET d.branchName = CASE WHEN d.branchId = "id-15c1737f-1ab5-417e-b74c-14f3ee3f3467" TEHN "Custardy underpants competition" ELSE d.branchName END,
b.branchName = "Custardy underpants competition" FOR b WITHIN d WHEN b.branchId = "id-15c1737f-1ab5-417e-b74c-14f3ee3f3467" AND b.type = "Branch" END
WHERE ANY b WITHIN d SATISFIES b.type = "Branch" AND b.branchId = "id-15c1737f-1ab5-417e-b74c-14f3ee3f3467" AND b.type = "Branch" END;