2016-12-22 21 views
2

我是新的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(); 

请问您可以请他让我找到确切的查询来达到我的要求。

+0

如果乙方不应该在列表中,因为它有一个循环的关系,然后为什么A在列表中?它与B有一个循环关系。 –

+0

这是我的错误,我纠正它,结果只会是C和D – user3812269

回答

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]