如何在Gremlin中找到两个顶点之间的Edge ID

时间:2018-05-30 06:00:56

标签: graph gremlin gremlin-server

假设我们有一个包含许多顶点的图 g ,我们需要在顶点 v1 和顶点 v2 之间找到边缘和边缘ID ID id1 id2

2 个答案:

答案 0 :(得分:5)

这次的遍历只是:

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

答案 1 :(得分:1)

如果您将gremlin-python与orientDB一起使用,代码段下方将对您有所帮助。

g.V(from_v_id).outE(label).where(__.inV().where(__.hasId("#" + to_v_id))).next()