在ArangoDB AQL中,可以使用GRAPH_TRAVERSAL
函数从多个起始顶点遍历图形,并确保所有遍历中的唯一顶点。以下是一个示例解决方法的代码:
首先,我们需要创建一个图形并插入一些边和顶点:
// 创建图形
GRAPH_CREATE("myGraph");
// 插入顶点
FOR doc IN [{'_key':'a'}, {'_key':'b'}, {'_key':'c'}, {'_key':'d'}, {'_key':'e'}, {'_key':'f'}]
INSERT doc INTO myGraph_vertices
// 插入边
FOR doc IN [{'_from':'myGraph_vertices/a', '_to':'myGraph_vertices/b'},
{'_from':'myGraph_vertices/a', '_to':'myGraph_vertices/c'},
{'_from':'myGraph_vertices/b', '_to':'myGraph_vertices/d'},
{'_from':'myGraph_vertices/c', '_to':'myGraph_vertices/e'},
{'_from':'myGraph_vertices/d', '_to':'myGraph_vertices/f'},
{'_from':'myGraph_vertices/e', '_to':'myGraph_vertices/f'},
{'_from':'myGraph_vertices/a', '_to':'myGraph_vertices/e'}]
INSERT doc INTO myGraph_edges
然后,我们可以使用GRAPH_TRAVERSAL
函数来执行遍历,并确保返回的顶点是唯一的:
LET startVertices = (FOR v IN myGraph_vertices FILTER v._key IN ['a', 'b', 'c'] RETURN v._id)
FOR v, e, p IN 2..3 OUTBOUND startVertices myGraph_edges
OPTIONS {uniqueVertices: 'global'} // 确保返回的顶点是唯一的
RETURN v
上述代码中,startVertices
定义了我们的起始顶点。在GRAPH_TRAVERSAL
函数中,我们指定了遍历的深度范围为2到3,并且通过OUTBOUND
关键字定义了遍历的方向。通过OPTIONS
子句,我们将uniqueVertices
参数设置为'global'
,以确保返回的顶点在所有遍历中都是唯一的。最后,我们返回遍历的顶点。
请注意,上述示例假设已经在ArangoDB中创建了一个名为myGraph
的图形。如果尚未创建,请先执行相应的命令创建图形。