使用属性在顶点之间添加边
Adding edges between vertices using properties
我正在尝试在类似于 的顶点之间添加边,除了我想考虑其相等性的不同属性,例如使用带有 'x'
:
索引的 TinkerGraph
g.addV().property("x", "1").
addV().property("x", "2").property("y", "1").
addV().property("x", "3").property("y", "2")
我正在尝试添加 x=y 的两条边,以便 (x=3,y=2) --link--> (x=2,y=1) --link--> (x=1)
使用类似的东西:
g.V().as("a").
V().as("b").
where(has("x", select("a").values("y"))).
addE("link").from("a").to("b")
但是这个特定的查询创建的边比我预期的要多(所有带有 'y'
的顶点都连接到所有其他顶点)。
任何帮助形成适当的 where-clause 的人都将不胜感激。
调试 Gremlin 时,您有时需要删除一些步骤,以便您回顾从管道的早期部分返回的内容。请注意您遍历的第一部分返回的是什么:
gremlin> g.V().as("a").
......1> V().as("b")
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
您会明白为什么最终会得到更多您想要的边。我开始用这个过滤掉其中的一些:
gremlin> g.V().has('x').as('a').
......1> V().has('y').as('b').
......2> where('a',neq('b'))
==>v[2]
==>v[5]
==>v[5]
==>v[2]
你只关心 "x" 属性 "a" 和 "y" 属性 "b" 的顶点,因为你不希望那些顶点自己匹配你还想用 where('a',neq('b'))
.
取消它们
从那里开始,剩余的 where()
子句与您引用的问题中的子句非常相似:
gremlin> g.V().has('x').as('a').
......1> V().has('y').as('b').
......2> where('a', neq('b')).
......3> where('a', eq('b')).by('x').by('y').
......4> addE('link').from('a').to('b')
==>e[8][0-link->2]
==>e[9][2-link->5]
因此:
gremlin> g.V().has('x','1').outE('link').inV().outE('link').inV().path().by('x').by(label)
==>[1,link,2,link,3]
我正在尝试在类似于 'x'
:
g.addV().property("x", "1").
addV().property("x", "2").property("y", "1").
addV().property("x", "3").property("y", "2")
我正在尝试添加 x=y 的两条边,以便 (x=3,y=2) --link--> (x=2,y=1) --link--> (x=1)
使用类似的东西:
g.V().as("a").
V().as("b").
where(has("x", select("a").values("y"))).
addE("link").from("a").to("b")
但是这个特定的查询创建的边比我预期的要多(所有带有 'y'
的顶点都连接到所有其他顶点)。
任何帮助形成适当的 where-clause 的人都将不胜感激。
调试 Gremlin 时,您有时需要删除一些步骤,以便您回顾从管道的早期部分返回的内容。请注意您遍历的第一部分返回的是什么:
gremlin> g.V().as("a").
......1> V().as("b")
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
您会明白为什么最终会得到更多您想要的边。我开始用这个过滤掉其中的一些:
gremlin> g.V().has('x').as('a').
......1> V().has('y').as('b').
......2> where('a',neq('b'))
==>v[2]
==>v[5]
==>v[5]
==>v[2]
你只关心 "x" 属性 "a" 和 "y" 属性 "b" 的顶点,因为你不希望那些顶点自己匹配你还想用 where('a',neq('b'))
.
从那里开始,剩余的 where()
子句与您引用的问题中的子句非常相似:
gremlin> g.V().has('x').as('a').
......1> V().has('y').as('b').
......2> where('a', neq('b')).
......3> where('a', eq('b')).by('x').by('y').
......4> addE('link').from('a').to('b')
==>e[8][0-link->2]
==>e[9][2-link->5]
因此:
gremlin> g.V().has('x','1').outE('link').inV().outE('link').inV().path().by('x').by(label)
==>[1,link,2,link,3]