Gremlin:如何找到没有特定边的顶点?

Jer*_*ver 5 graph vertices edges gremlin

我一直在研究Gremlin图语言,它看起来非常强大。但是,在研究如何根据需求进行评估时,我遇到了一个我似乎无法完成的案例。

假设已启动Gremlin,并使用其示例数据库:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
...
gremlin> g.V.out('knows')
==>v[2]
==>v[4]
Run Code Online (Sandbox Code Playgroud)

因此,这显示了具有“已知”边缘的顶点。

但是,我想找到具有“已知”边缘的顶点。就像是:

gremlin> g.V.outNot('knows')
==>v[3]
==>v[5]
==>v[6]
Run Code Online (Sandbox Code Playgroud)

如何找到这些顶点?

(编辑以使输出正确)

ste*_*tte 5

我用几种方式解释这个问题,但是也许这就是您所追求的。一种方法是:

gremlin> g = TinkerGraphFactory.createTinkerGraph()    
==>tinkergraph[vertices:6 edges:6]
gremlin> g.V.outE.hasNot('label','knows')
==>e[9][1-created->3]
==>e[12][6-created->3]
==>e[10][4-created->5]
==>e[11][4-created->3]
gremlin> g.V.outE.hasNot('label','knows').inV
==>v[3]
==>v[3]
==>v[5]
==>v[3]
Run Code Online (Sandbox Code Playgroud)

请注意,标签和ID均被识别为属性:

gremlin> g.V.has('id',"1")
==>v[1]
gremlin> g.E.map("label","id")
==>{id=10, label=created}
==>{id=7, label=knows}
==>{id=9, label=created}
==>{id=8, label=knows}
==>{id=11, label=created}
==>{id=12, label=created}
Run Code Online (Sandbox Code Playgroud)

考虑此问题的另一种方法是找到没有“知道”边的顶点列表:

gremlin> g.V.filter{!it.bothE('knows').hasNext()}    
==>v[3]
==>v[6]
==>v[5]
Run Code Online (Sandbox Code Playgroud)