如何在 ArangoDB 中找到顶点的入度?

How to find indegree of a vertex in ArangoDB?

我试图在我的顶点集合中找到所有悬空文档。为此,我想我将不得不找到 indegree=0 的所有顶点。我如何使用 AQL 执行此操作。

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

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

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