arangodb - 如何在 ArangoDB 中找到顶点的入度?
问题描述
我试图在我的顶点集合中找到所有悬空的文档。为此,我想我必须找到 indegree=0 的所有顶点。如何使用 AQL 做到这一点。
解决方案
假设您在集合中有一个带有_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
使用命名图的遍历具有考虑图的所有边集合的好处。如果它有多个顶点集合,那么您仍然需要单独检查每个集合。
推荐阅读
- reactjs - 返回一组单元格
- java - recycler view 数据如何绑定?
- highcharts - sankey-diagram(跳过列)highcharts
- html - HTML 超链接不工作 Dreamweaver
- reactjs - 在子文件夹上反应应用程序
- java - Java 数组对象和初始化程序混淆
- python - 在 QGraphicsView 中播放图像序列(神秘的内存泄漏)
- angular - RxJS - 如何用 Observable 替换订阅中的回调
- c# - 在 Windows 服务中部署托管 WCF 服务时出现问题
- c# - 如何在 C# 中由另一个线程挂起一个线程?