如何在单个遍历中从一个顶点创建多个边

时间:2018-07-13 10:21:20

标签: java tinkerpop3 janusgraph gremlin-server

我有具有此签名的功能:

public void doTheJob(String from, Collection<Pair<String, String>> relations)

其中:

from是图形应询问的唯一值

relations是对的集合,其中对中的第一个元素是边label,第二个元素与from类似,但它指定关系的第二面。例如(假设安迪,狗是唯一的):

"andy" ["has,dog", "has,cat", "is,person"]

我想在这些顶点之间添加这些边(它们已经存在于图形中,我想查询它们并在它们之间创建边)。我的要求是一次遍历。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种实现方法:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.addV().property('name','cat').
......1>   addV().property('name','dog').
......2>   addV().property('name','person').iterate()
gremlin> markoRelations = [['has','dog'],['has','cat'],['is','person']];[]
gremlin> joshRelations = [['has','dog'],['is','person']];[]
gremlin> t = g.V().has('name','marko').as('from');[]
gremlin> markoRelations.each { t = t.V().has('name',it[1]).
......1>                             addE(it[0]).from('from') };[]
gremlin> t.iterate()
gremlin> t = g.V().has('name','josh').as('from');[]
gremlin> joshRelations.each { t = t.V().has('name',it[1]).
......1>                            addE(it[0]).from('from') };[]
gremlin> t.iterate()
gremlin> g.E().hasLabel('is','has')
==>e[19][1-has->15]
==>e[20][1-has->13]
==>e[21][1-is->17]
==>e[22][4-has->15]
==>e[23][4-is->17]

不要过多地受Groovy语法的干扰,而只专注于Gremlin和结构。 markoRelationsjoshRelations只是列表列表,内部列表基本上就是您Pair。您在行尾看到的;[]与答案无关-它仅有助于控制Gremlin控制台将显示的输出。