如何从外顶点列表中删除循环顶点列表

时间:2016-12-22 08:05:00

标签: datastax gremlin datastax-enterprise-graph

我是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 个答案:

答案 0 :(得分:0)

听起来你想使用SimplePath。有关文档,请参阅此处 - http://tinkerpop.apache.org/docs/current/reference/#simplepath-step

答案 1 :(得分:0)

所以你基本上想要过滤出具有inout边缘到特定顶点的顶点。

这是您的示例图表:

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]