【发布时间】:2021-09-11 15:24:20
【问题描述】:
我正在尝试在 arangodb 中编写一个更新命令,以在具有嵌套数组的文档中插入单个“key”:“value”属性。
{
"OuterBlock": {
"InnerBlock": {
"key1": "value1",
"key2": {
"key21": "value21"
},
"key3": {
"key31": "value31"
},
"key4": [
{
"key41": "value1",
"key42": {
"key421": "value421"
},
"key43": [
{
"key431": "value431",
"key432": {
"key4321": "value4321"
}
}
]
},
{
"key44": "value44",
"key45": {
"key451": "key451"
}
}
]
}
}
}
我需要在 key432 下再添加一个 key:value 对(例如:“key4322”:“value4322”)。我先尝试了选择查询,然后尝试使用 MERGE 命令添加此属性。
FOR t IN test
FILTER t._key=="Test"
Collect a = t.OuterBlock.InnerBlock.key4[0].key43[0].key432 into aitems
LET newa = (MERGE(a , {"key4322": "value4322"}))
RETURN newa
返回结果如下
[
{
"key4321": "value4321",
"key4322": "value4322"
}
]
所以我尝试使用以下查询将此结果与第一个块“key43”合并
FOR t IN test
FILTER t._key=="Test"
collect a = t.OuterBlock.InnerBlock.key4[0].key43[0] into aitems
LET newa = (MERGE(a , {key432:
(
FOR t IN test
FILTER t._key=="Test"
Collect b = t.OuterBlock.InnerBlock.key4[0].key43[0].key432 into bitems
LET newb = (MERGE(b , {"key4322": "value4322"}))
Return newb
)
}))
RETURN newa
输出在 key432 中给了我一个额外的数组块 [],它在原始数据中不存在。因此它正在改变文档的格式。我怎样才能删除这个数组块。 请提出建议。
[
{
"key431": "value431",
"key432": **[**
{
"key4321": "value4321",
"key4322": "value4322"
}
**]**
}
]
【问题讨论】:
-
请帮忙,因为我在这个数组上苦苦挣扎了几天。尝试使用 PUSH 但没有运气 :( 由于检索查询不起作用,我离此要求的更新语句不远