如何在 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
}
]
因为我的图形数据库 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
}
]