Обход для этого просто:
g.V(id1).bothE().where(otherV().hasId(id2))
Я использовал bothE()
, так как вы не сказали, будет ли переход от v1 до v2 или наоборот.Когда вы уже знаете направление, вам следует использовать outE()
или inE()
.В дополнение к этому, когда вы знаете метку ребра, вы должны указать ее на этом шаге, чтобы уменьшить количество проходимых ребер.
Для современного графика TinkerPop это выглядит так:
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().valueMap(true)
==>[name:[marko],label:person,id:1,age:[29]]
==>[name:[vadas],label:person,id:2,age:[27]]
==>[name:[lop],label:software,id:3,lang:[java]]
==>[name:[josh],label:person,id:4,age:[32]]
==>[name:[ripple],label:software,id:5,lang:[java]]
==>[name:[peter],label:person,id:6,age:[35]]
gremlin> g.V(1).bothE().where(otherV().hasId(2)).id()
==>7
и оптимизирован с явным указанием направления и края:
gremlin> g.V(1).outE('knows').where(inV().hasId(2)).id()
==>7