Я хочу выполнить соединение между двумя типами вершин с помощью gremlin
select * from type1 inner join type2 in type2.id = type1.type2_id
Следующее работает при использовании type1 и type2 в качестве меток вершин:
g.V()
.hasLabel("type2").as("t2")
.inE("hasJoin")
.hasLabel("type1").as("t1")
.select("t1", "t2")
Однако мой граф не использует метку вершины для представления типа, а вместо этого использует другую вершину, соединенную ребром hasType.
g.V()//
.addV("instance1").as("instance1")//
.addV("instance2").as("instance2")//
.addV("type1").as("type1")//
.addV("type2").as("type2")//
.addE("hasType").from("instance1").to("type1")//
.addE("hasType").from("instance2").to("type2")//
.addE("hasJoin").from("instance1").to("instance2")//
.iterate();
Мне нужно было бы сделать что-то вроде замены
hasLabel("type2").as("t2")
с участием
hasLabel("type2").inE("hasType").outV().as("t2"):
что приведет к
g.V()
.hasLabel("type2").inE("hasType").outV().as("t2")
.inE("hasJoin")
.hasLabel("type1").inE("hasType").outV().as("t1")
.select("t1", "t2")
Это работает для «t2», но не для «t1», поскольку .inE («hasJoin»). HasLabel («type1») просто неверен. Какую функцию мне нужно использовать для соединения «t1» и «t2»?