Titan图:找到没有外边的顶点

时间:2014-12-23 18:05:12

标签: graph titan gremlin

我将父顶点(P)连接到子顶点(C1,C2,C3,... Cn)(通过传出边标签“dep”),其中Cn可能非常大。这些子顶点(C1,C2,..)可以通过输出边缘标签“frnds”连接或不连接到其他顶点。在Gremlin中有没有办法找出(P)的所有Child顶点,它们没有任何标记为“frnds”的边缘?

此致 库马尔

2 个答案:

答案 0 :(得分:3)

玩具图表:

g = new TinkerGraph()
p = g.addVertex('p')
c1 = g.addVertex('c1')
c2 = g.addVertex('c2')
c3 = g.addVertex('c3')
o1 = g.addVertex('o1')
o2 = g.addVertex('o2')
g.addEdge(p, c1, 'dep')
g.addEdge(p, c2, 'dep')
g.addEdge(p, c3, 'dep')
g.addEdge(c1, o1, 'frnds')
g.addEdge(c1, o2, 'frnds')
g.addEdge(c2, o2, 'frnds')

您的查询说明的解决方案(可能不是最聪明的):

r = []; g.v('p').out('dep').store(r).outE('frnds').outV.sideEffect{r.remove(it)}

输出:

r
==>v[c3]

更新: 比较短的版本,可能也更有效:

g.v('p').out('dep').filter{!it.outE('frnds').hasNext()}
==>v[c3]

答案 1 :(得分:0)

g.v('p')。out('dep')。filter {!it.outE('frnds')。hasNext()}。range(0,100)查询在你的范围内更快。它将获得100个没有传出边的顶点