Как удалить список циклических вершин из списка внешних вершин

Я новичок в графике DSE, я хочу создать запрос gremlin, который дает мне список всех вершин, которые связаны с указанной вершины, но из этого списка я хочу удалить этот список, которые связаны циклически.

e.g.

A --> B
A --> C
A --> D
B --> A

Если у меня есть выше отношение, то я хочу ниже список вершин, как результат

[C,D]

B и A не должны быть в списке выше, так как они имеют циклическое отношение

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

g.V().has('id','id').as('mainV').outE('Prerequisite').inV();

g.V().has('id','id').as('mainV').out().out().cyclicPath().path().unfold().dedup();

Не могли бы вы помочь мне найти точный запрос для достижения моих требований.

2 ответа

Решение

Таким образом, вы в основном хотите отфильтровать вершины, которые имеют in и out край определенной вершины.

Это ваш пример графика:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV().property(id, "A").as("a").
......1>   addV().property(id, "B").as("b").
......2>   addV().property(id, "C").as("c").
......3>   addV().property(id, "D").as("d").
......4>   addE("link").from("a").to("b").
......5>   addE("link").from("a").to("c").
......6>   addE("link").from("a").to("d").
......7>   addE("link").from("b").to("a").iterate()

И это то, что вы ищете:

gremlin> g.V().as("a").not(out().out().where(eq("a"))).not(__.in().in().where(eq("a")))
==>v[C]
==>v[D]

Похоже, вы хотите использовать SimplePath. Пожалуйста, смотрите здесь для документации - http://tinkerpop.apache.org/docs/current/reference/

Другие вопросы по тегам