如何在ArangoDB中查找顶点的度数?

时间:2019-11-07 09:06:37

标签: arangodb

我试图在我的顶点集合中找到所有悬挂的文档。为此,我想我必须找到indegree = 0的所有顶点。如何使用AQL做到这一点。

1 个答案:

答案 0 :(得分:2)

假设您在集合_key和边集合A中有Verts = Edges的文档,那么可以像这样确定度数:

RETURN LENGTH(FOR v IN INBOUND 'Verts/A' Edges RETURN true)

如果您有一个命名图MyGraph,请使用它:

RETURN LENGTH(FOR v IN INBOUND 'Verts/A' GRAPH 'MyGraph' RETURN true)

要确定哪些顶点没有入站边,可以执行以下操作:

FOR s IN Verts
  FILTER NOT FIRST(FOR v IN INBOUND s._id Edges LIMIT 1 RETURN true)
  RETURN s._id

要查找悬垂的顶点(不存在任何连接的边),则必须将INBOUND更改为ANY

使用边缘索引而不进行遍历比使用子查询遍历更好:

FOR v IN Verts
  FILTER NOT FIRST(FOR e IN Edges
    FILTER v._id == e._from || v._id == e._to
    LIMIT 1
    RETURN true)
  RETURN v._id

使用命名图进行遍历的好处是考虑了图的所有边缘集合。如果它具有多个顶点集合,那么您确实需要单独检查每个集合。