如何在 ArangoDB 中查找名为 x 的所有后代属性的总和?

How to find sum of all descendents attribute named x in ArangoDB?

因为我的图形数据库 ArangoDB 中有树结构,如下所示

id为2699394的节点是该图树的父节点。每个节点都分配有名为 X 的属性。我想知道父节点 2699394 的所有后代的 x 总和,不包括它自己的属性 x 总和。 例如假设如果,

 2699399 x value is = 5,
 2699408 x value is = 3,
 2699428 x value is = 2,
 2699418 x value is = 5,

then parent node 2699394 sum of x should be = 5 + 3 + 2 + 5 
                                            = 15

所以答案是 15。有人可以在 ArangoDB AQL 中查询这个计算吗?

为了找出特定节点的后代数量,我使用了以下查询,

`FOR v, e, p   in 1..1000 OUTBOUND 'Person/1648954' 
GRAPH 'Appes'
RETURN v.id`

提前致谢。 玛雅克

假设 children 链接到他们的 parent,数据可以这样可视化:

nodes/2699394 SUM of children?
      ↑
nodes/2699399 {x: 5}
      ↑
nodes/2699408 {x: 3}
      ↑
nodes/2699428 {x: 2}
      ↑
nodes/2699418 {x: 5}

要遍历 children 的链,我们需要在 INBOUND 方向遍历(如果 parent 节点指向 children,则为 OUTOBUND):

FOR v IN 1..10 INBOUND "nodes/2699394" relations
  RETURN v

在此示例中,通过指定边集合关系来使用匿名图。您还可以使用命名图,例如 GRAPH "yourGraph".

nodes/2699394 开始,遍历到 nodes/2699418 的边,途中的每个节点 return 到目前为止都没有变化。

由于我们只对 x 属性感兴趣,我们可以将其更改为仅 return 该属性:RETURN v.x - 这将 return [ 5, 3, 2, 5 ].除非我们说 IN 0..10,否则不会包括起始顶点。

在 FOR 循环中,我们无法访问所有 x 值,但一次只能访问一个。我们不能在这里做类似 RETURN SUM(v.x) 的事情。相反,我们需要将遍历的结果分配给一个变量,这使得它成为 sub-query。然后我们可以将所有数字相加 return 结果值:

LET x = (
  FOR v IN 1..10 INBOUND "nodes/2699394" relations
    RETURN v.x
)
RETURN SUM(x) // [ 15 ]

如果您想 return 具有计算的 x 属性的起始节点,您可以执行以下操作:

LET doc = DOCUMENT("nodes/2699394")
LET x = (
  FOR v IN 1..10 INBOUND doc relations
    RETURN v.x
)
RETURN MERGE( doc, { x: SUM(x) } )

结果会是这样的:

[
  {
    "_id": "nodes/2699394",
    "_key": "2699394",
    "_rev": "2699394",
    "x": 15
  }
]