首页 > 解决方案 > 如何在 ArangoDB 中找到顶点的入度?

问题描述

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

标签: arangodb

解决方案


假设您在集合中有一个带有_key=的文档和一个边缘集合,那么您可以像这样确定入度:AVertsEdges

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

要找到悬垂的顶点(没有任何连接的边),您必须更改INBOUNDANY

与其使用子查询遍历,不如使用边缘索引而不进行遍历:

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

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


推荐阅读