ArangoDB从嵌套数组中移除元素

rdlzhqv9  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(137)

我正在尝试从巢状结构中移除数组元素。
例如,需要从文档中删除ID为21的元素。

FOR doc in [
{
    _key:1,
    Lvl1:[
        {ID:1, Lvl2:[{ID:10,Text:"A"},{ID:11,Text:"B"},{ID:12,Text:"C"}]},
        {ID:2, Lvl2:[{ID:20,Text:"D"},{ID:21,Text:"E"},{ID:22,Text:"F"}]},
    ]
}]
    
return {_key:doc._key ,Lvl1:doc.Lvl1[*].Lvl2[* FILTER CURRENT.ID!=21]}

fitler基本上可以工作,但文档结构没有保留,因此我无法对文档的Lvl1执行更新。

输出

[
  {
    "_key": 1,
    "Lvl1": [
      [
        {
          "ID": 10,
          "Text": "A"
        },
        {
          "ID": 11,
          "Text": "B"
        },
        {
          "ID": 12,
          "Text": "C"
        }
      ],
      [
        {
          "ID": 20,
          "Text": "D"
        },
        {
          "ID": 22,
          "Text": "F"
        }
      ]
    ]
  }
0md85ypi

0md85ypi1#

下面是一个解决方案:

FOR doc in [
{
    _key:1,
    Lvl1:[
        {ID:1, Lvl2:[{ID:10,Text:"A"},{ID:11,Text:"B"},{ID:12,Text:"C"}]},
        {ID:2, Lvl2:[{ID:20,Text:"D"},{ID:21,Text:"E"},{ID:22,Text:"F"}]},
    ]
}]
    
return {_key:doc._key ,Lvl1:(
    FOR item IN doc.Lvl1
    RETURN {ID: item.ID,Lvl2: item.Lvl2[* FILTER CURRENT.ID!=21]}
)}

使用嵌套的FOR相当于map操作,可以更好地控制输出。

相关问题