在Gremlin中的现有节点之间添加边

bcm*_*360 6 gremlin

我是Gremlin的新手,只是试图建立一个基本图表.我已经能够在新顶点上做一个基本的addEdge,即

gremlin> v1 = g.addVertex()
==>v[200004]
gremlin> v2 = g.addVertex()
==>v[200008]
gremlin> e = g.addEdge(v1, v2, 'edge label')
==>e[4c9f-Q1S-2F0LaTPQN8][200004-edge label->200008]
Run Code Online (Sandbox Code Playgroud)

我也能够通过id查找顶点之间的边缘:

gremlin> v1 = g.v(200004)
==>v[200004]
gremlin> v2 = g.v(200008)
==>v[200008]
gremlin> e = g.addEdge(v1, v2, 'edge label')
==>e[4c9f-Q1S-2F0LaTPQN8][200004-edge label->200008]
Run Code Online (Sandbox Code Playgroud)

但是,我现在想要根据多个属性查找顶点,这就是它变得棘手的地方.为了查找正确的顶点,我正在进行2次调用.has.看起来找到了正确的顶点,但是添加边缘失败了.

gremlin> v1 = g.V.has("x",5).has('y",7)
==>v[200004]
gremlin> v2 = g.V.has("x",3).has('y",5)
==>v[200008]

gremlin> e = g.addEdge(v1, v2, 'edge label')
No signature of method: groovy.lang.MissingMethodException.addEdge() is applicable for argument types: () values: []
Run Code Online (Sandbox Code Playgroud)

基于属性值查找,在两个现有顶点之间添加简单边的最简单方法是什么?

bcm*_*360 13

关键问题是.has返回一个Pipe:为了得到特定的顶点实例,一个简单的调用就.next()可以了:

gremlin> v1 = g.V.has("x",5).has('y",7).next()
==>v[200004]
gremlin> v2 = g.V.has("x",3).has('y",5).next()
==>v[200008]

gremlin> e = g.addEdge(v1, v2, 'edge label')
==>e[4c9f-Q1S-2F0LaTPQN8][200004-edge label->200008]
Run Code Online (Sandbox Code Playgroud)

请注意,它.next()只会返回管道中的下一个项目.在这种情况下,将忽略与属性值匹配的任何其他顶点.

  • 请参阅[此线程](https://groups.google.com/g/gremlin-users/c/Vx_0HAJ5Pw0),我认为这个答案已经过时,因为不再使用 addEdge 。请参阅此处了解当前文档:http://tinkerpop.apache.org/docs/3.0.0-incubating/#addedge-step (2认同)