ArangoDB遍历,条件为垂直';邻居

ArangoDB遍历,条件为垂直';邻居,arangodb,aql,Arangodb,Aql,我有以下图表: 我想编写一个AQL查询,返回从节点Q1开始的路径,其中路径中的第二个节点有邻居P6(开始节点Q1的邻居总是在其邻居中有一个p节点(P6,P4,…) 例如,好的路径是:Q1->Q1-P6-3->STRING-2,Q1->Q1-P6-3->Q1-P6-3-QUAL-P2-2->QUANT-2,等等。 检查病情的最佳方法是什么?现在,我已经向节点(如Q1-P6-3添加了一个属性property),该属性的键为P-node(来自其邻域)并仅过滤路径: FILTER p.vertices

我有以下图表:

我想编写一个AQL查询,返回从节点
Q1
开始的路径,其中路径中的第二个节点有邻居
P6
(开始节点
Q1
的邻居总是在其邻居中有一个p节点(
P6
P4
,…)

例如,好的路径是:
Q1->Q1-P6-3->STRING-2
Q1->Q1-P6-3->Q1-P6-3-QUAL-P2-2->QUANT-2
,等等。 检查病情的最佳方法是什么?现在,我已经向节点(如
Q1-P6-3
添加了一个属性
property
),该属性的键为P-node(来自其邻域)并仅过滤路径:

FILTER p.vertices[1].property == 'P6'
但我相信有一种更聪明的方法可以做到这一点。
提前谢谢你

AQL首先获取将P6作为直接邻居的所有节点的列表,然后使用该列表过滤遍历查询中的路径。这样,您就不需要跟踪顶点中的特性:

LET p6Neighbors = (FOR t IN testEdge
                    FILTER t._to == 'test2/P6'
                    RETURN t._from)
for v,e,p in 1..5 ANY 'test2/Q1' testEdge
FILTER p.vertices[1]._id in p6Neighbors
return p

AQL首先获取将P6作为直接邻居的所有节点的列表,然后使用该列表过滤遍历查询中的路径。这样,您就不需要跟踪顶点中的特性:

LET p6Neighbors = (FOR t IN testEdge
                    FILTER t._to == 'test2/P6'
                    RETURN t._from)
for v,e,p in 1..5 ANY 'test2/Q1' testEdge
FILTER p.vertices[1]._id in p6Neighbors
return p