Как найти степень вершины в ArangoDB? - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь найти все свисающие документы в моей коллекции вершин. Для этого я предполагаю, что мне нужно будет найти все вершины с indegree = 0. Как я могу сделать это с помощью AQL.

1 Ответ

2 голосов
/ 07 ноября 2019

Если у вас есть документ с _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

Обходиспользование именованного графа имеет то преимущество, что рассматриваются все граничные коллекции графа. Если у него есть несколько коллекций вершин, вам все равно нужно проверить каждую коллекцию отдельно.

...