AQL ArangoDB中数组对象的更新

问题描述 投票:0回答:1

我具有如下数据结构:

object1.array1[object2.array2[]]

我想从object2删除array2或删除所有数组元素。

使用AQL查询是否有解决方案?

arrays object arangodb aql
1个回答
0
投票

演示文档:

{
  "foo": [
    {"x": [1,2,3], "y": [4,5,6], "z": [7,8,9] },
    {"hello": "world" }
  ],
  "bar": true,
  "_key": "0"
}

要使用AQL删除foo[0].y[4,5,6]),这是一种通用解决方案:

LET attr = "foo"  // target top-level attribute
LET i = 0         // positive or negative index of target array element
LET subattr = "y" // sub-attribute to remove

LET doc = DOCUMENT("test/0")

LET before = SLICE(doc[attr], 0, i)              // array elements before target
LET middle = UNSET(doc[attr][i], subattr)        // remove sub-attribute from target element
LET after = i == -1 ? [] : SLICE(doc[attr], i+1) // elements after target
LET combined = APPEND(APPEND(before, middle), after)

UPDATE doc WITH { [attr]: combined } IN test
RETURN {NEW, OLD}

要删除"world",只需将其更改为LET i = 1LET subattr = "hello"

© www.soinside.com 2019 - 2024. All rights reserved.