首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ArangoDB中找到名为x的所有后代属性的和?

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

Stack Overflow用户
提问于 2016-07-19 05:49:06
回答 1查看 573关注 0票数 2

由于我的图形数据库中有树结构,所以ArangoDB如下所示

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

代码语言:javascript
运行
复制
 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中对这个计算提出疑问吗?

为了查找特定节点的后代,我使用了下面的查询,

代码语言:javascript
运行
复制
`FOR v, e, p   in 1..1000 OUTBOUND 'Person/1648954' 
GRAPH 'Appes'
RETURN v.id`

提前谢谢。梅兰克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 08:47:21

假设孩子和他们的父母联系在一起,这些数据可以像这样可视化:

代码语言:javascript
运行
复制
nodes/2699394 SUM of children?
      ↑
nodes/2699399 {x: 5}
      ↑
nodes/2699408 {x: 3}
      ↑
nodes/2699428 {x: 2}
      ↑
nodes/2699418 {x: 5}

要遍历子链,我们需要向入站方向遍历(如果父节点指向子节点,则为OUTOBUND ):

代码语言:javascript
运行
复制
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)这样的事情。相反,我们需要将遍历的结果分配给一个变量,这使得它成为一个子查询。然后,我们可以将所有数字相加,并返回结果值:

代码语言:javascript
运行
复制
LET x = (
  FOR v IN 1..10 INBOUND "nodes/2699394" relations
    RETURN v.x
)
RETURN SUM(x) // [ 15 ]

如果要返回具有计算x属性的开始节点,可以执行以下操作:

代码语言:javascript
运行
复制
LET doc = DOCUMENT("nodes/2699394")
LET x = (
  FOR v IN 1..10 INBOUND doc relations
    RETURN v.x
)
RETURN MERGE( doc, { x: SUM(x) } )

其结果将是:

代码语言:javascript
运行
复制
[
  {
    "_id": "nodes/2699394",
    "_key": "2699394",
    "_rev": "2699394",
    "x": 15
  }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38450457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档