我正在使用 ArangoDB 的遍历对象来遍历递归组成员结构,同时避免以下循环。在某些情况下,我需要加入两个单独遍历的结果。有没有一种有效的方法来利用AQL来加入遍历结果?我目前正在使用 javascript 将结果加入内存中。
问问题
255 次
1 回答
3
我想用遍历图来解释这一点。我们在ANY
方向上做了两次遍历,所以结果的数量要大一些。我们从具有共同邻居的点开始,这将成为连接操作的结果。一个查询将查看哪些应该有共同点,但其他的迭代则没有A
。E
B
基本迭代:
FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v._key
从circles/A
这个结果["B","G"]
开始,从circles/E
这个结果开始["F", "B"]
- 所以很明显,我们应该只得到"B"
连接的结果。
我们的第一种可能的方法是使用两个子查询并使用以下方法连接它们INTERSECTION
:
LET firstTraversal = (FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v)
LET secondTraversal = (FOR v IN 1..1 ANY 'circles/E' GRAPH 'traversalGraph' RETURN v)
RETURN INTERSECTION(firstTraversal, secondTraversal)
这里可能的问题是,将完成对象的全深度比较,这可能会变得昂贵。因此,另一种方法可能是使用它们的_key
属性加入它们:
LET firstTraversal = (FOR v IN 1..1 ANY 'circles/A' GRAPH 'traversalGraph' RETURN v)
LET secondTraversal = (FOR v IN 1..1 ANY 'circles/E' GRAPH 'traversalGraph' RETURN v)
FOR oneSet IN firstTraversal
FOR otherSet IN secondTraversal
FILTER oneSet._key == otherSet._key RETURN oneSet
于 2016-05-04T09:05:11.037 回答