假设我们有一个包含许多顶点的图 g ,我们需要在顶点 v1 和顶点 v2 之间找到边缘和边缘ID ID id1 和 id2 。
答案 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()