我最近读到ArangoDB能够将边连接到图中的其他边。在这种情况下,如何查询路径工作?例如:
car <-------- part
^
|
|
installationEvidence
在这种情况下,installationEvidence
是连接到汽车零件之间边缘的节点。从汽车节点开始,返回installationEvidence
而不是part
的AQL是什么?在installationEvidence
图层考虑了part
和p.vertices[1]
吗?
答案 0 :(得分:3)
在ArangoDB中,边缘是一种特殊类型的文档。
这就是为什么你可以存储指向其他边缘的边缘。
从查询的角度来看,这个边有两个方向:
A)遍历导致target edge
。在这种情况下,它被假定为一般类型的文档,并且遍历将不遵循target edge
的任何方向。
这意味着您必须在语句中编写2个遍历步骤。
边缘的第一个结尾。
第二个从边缘的_from
或_to
开始。
在您的情况下,查询可能如下所示:
FOR edge IN 1 OUTBOUND @installationEvidece @@edges1
LET car = DOCUMENT(edge._to)
RETURN car
B)遍历穿过边缘,其边缘指向它。 这种情况比较复杂。在ArangoDB的架构中,“顶点”对它的附着边缘一无所知,边缘知道它们的顶点。 在这种情况下你可以做的是再次写两个遍历语句,其中第二个以遇到的边缘开始,例如:
FOR part,edge IN 1 INBOUND @car @@edges1
FOR installationEvidence IN 1 INBOUND edge @@edges2
[...]
暂时我们没有遇到客户的任何使用案例,使上述遍历更加透明。如果这对您至关重要,请与我们联系,我们可以提高优先级,使这类查询更容易制定。