由于我的图形数据库中有树结构,所以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`
提前谢谢。梅兰克
发布于 2016-07-19 08:47:21
假设孩子和他们的父母联系在一起,这些数据可以像这样可视化:
nodes/2699394 SUM of children?
↑
nodes/2699399 {x: 5}
↑
nodes/2699408 {x: 3}
↑
nodes/2699428 {x: 2}
↑
nodes/2699418 {x: 5}
要遍历子链,我们需要向入站方向遍历(如果父节点指向子节点,则为OUTOBUND ):
FOR v IN 1..10 INBOUND "nodes/2699394" relations
RETURN v
在本例中,通过指定边缘集合关系来使用匿名图。您还可以使用命名图,如GRAPH "yourGraph"
。
从nodes/2699394
开始,一直到nodes/2699418
的边缘都会被遍历,并且到目前为止返回的每个节点都没有变化。
因为我们只对x
属性感兴趣,所以可以将其更改为只返回该属性:RETURN v.x
-它将返回[ 5, 3, 2, 5 ]
。除非我们说IN 0..10
,否则将不包括开始顶点。
在FOR循环中,我们不能访问所有的x
值,一次只能访问一个。我们不能在这里做像RETURN SUM(v.x)
这样的事情。相反,我们需要将遍历的结果分配给一个变量,这使得它成为一个子查询。然后,我们可以将所有数字相加,并返回结果值:
LET x = (
FOR v IN 1..10 INBOUND "nodes/2699394" relations
RETURN v.x
)
RETURN SUM(x) // [ 15 ]
如果要返回具有计算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
}
]
https://stackoverflow.com/questions/38450457
复制相似问题