在下面的例子中,使用gremlin语法,我想获得顶点数1,知道顶点3和4的属性。
如此口头上 - 通过'创建'边缘到顶点,属性名称= lop AND 由'知道'边缘到顶点,属性名称= josh
我想准确指定边的名称,所以v.out.name.filter {it.matches(' lop | josh')}不好,因为它将占用1的所有边缘
答案 0 :(得分:3)
这很好用:
gremlin> Gremlin.version()
==>3.2.4
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('name', 'lop').in('created').as('x').
......1> out('knows').has('name', 'josh').select('x')
==>v[1]
您在问题中使用的语法看起来更像是TinkerPop 2,它不受支持。您应该使用TinkerPop 3。
答案 1 :(得分:2)
您可以使用match(TinkerPop 3.x):
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().
......1> match(
......2> __.as('a').out('created').has('name','lop'),
......3> __.as('a').out('knows').has('name','josh')).
......4> select('a')
==>v[1]
它与你的英文版本的阅读非常相似,但它并不是像Jason Plurad的答案那样以索引查看。我想它可以倒转一点来得到相同的答案:
gremlin> g.V().
......1> has('name','lop').
......2> match(
......3> __.as('a').in('created').as('b'),
......4> __.as('b').out('knows').has('name','josh')).
......5> select('b')
==>v[1]