【发布时间】:2015-02-21 21:52:24
【问题描述】:
我将父顶点 (P) 连接到子顶点 (C1, C2, C3,..Cn)(通过传出边标签“dep”),其中 Cn 可能非常大。这些子顶点(C1、C2、..)可能会或可能不会通过传出边标签“frnds”连接到其他顶点。 Gremlin 中有没有办法找出 (P) 的所有子顶点,这些顶点没有任何带有标签“frnds”的出边?
问候, 库马尔
【问题讨论】:
我将父顶点 (P) 连接到子顶点 (C1, C2, C3,..Cn)(通过传出边标签“dep”),其中 Cn 可能非常大。这些子顶点(C1、C2、..)可能会或可能不会通过传出边标签“frnds”连接到其他顶点。 Gremlin 中有没有办法找出 (P) 的所有子顶点,这些顶点没有任何带有标签“frnds”的出边?
问候, 库马尔
【问题讨论】:
玩具图:
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]
【讨论】:
g.v('p').out('dep').filter{!it.outE('frnds').hasNext()}.range(0,100) 当您指定范围时,查询工作得更快。它将得到 100 个没有出边的顶点
【讨论】: