如何在 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
使用命名图的遍历的好处是考虑了图的所有边集合。如果它有多个顶点集合,那么您仍然需要单独检查每个集合。
我试图在我的顶点集合中找到所有悬空文档。为此,我想我将不得不找到 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
使用命名图的遍历的好处是考虑了图的所有边集合。如果它有多个顶点集合,那么您仍然需要单独检查每个集合。