如何检查与 Gremlin 早期查询部分的节点是否相等?
How to check equality with nodes from an earlier part of query in Gremlin?
考虑下图:
我想找到他们之间有 FOLLOWS
关系并且评论过同一部电影的所有成对的人。在 Cypher 中,我会执行以下操作:
MATCH (p:Person) -[:REVIEWED]-> (m:Movie)
MATCH (p) -[:FOLLOWS]-> (p2:Person)
MATCH (p2) -[:REVIEWED]-> (m)
RETURN p, p2, m
我目前在 Gremlin 中拥有的内容:
g.V().hasLabel('person').as('p')
.out('REVIEWED').as('m')
.in('REVIEWED').as('p2')
.where(in('FOLLOWS').is(select('p'))) // this doesn't work
.select('p', 'm', 'p2')
但这行不通。我怎样才能在 Gremlin 中实现这一目标?
其实你们很亲近。试试这个
g.V().hasLabel('person').as('p')
.out('REVIEWED').as('m')
.in('REVIEWED').as('p2')
.where(in('FOLLOWS').as('p'))
.select('p', 'm', 'p2')
我们可以使用这个简单的图来测试查询
g.addV('Person').property('name','P1').as('p1').
addV('Person').property('name','P2').as('p2').
addV('Person').property('name','P3').as('p3').
addV('Movie').property('name','Shrek').as('m1').
addE('REVIEWED').from('p1').to('m1').
addE('REVIEWED').from('p2').to('m1').
addE('REVIEWED').from('p3').to('m1').
addE('FOLLOWS').from('p1').to('p3')
我们可以看到它使用 Gremlin 控制台工作
gremlin> g.V().hasLabel('Person').as('p').
......1> out('REVIEWED').as('m').
......2> in('REVIEWED').as('p2').
......3> where(__.in('FOLLOWS').as('p')).
......4> select('p', 'm', 'p2').by('name')
==>[p:P1,m:Shrek,p2:P3]
考虑下图:
我想找到他们之间有 FOLLOWS
关系并且评论过同一部电影的所有成对的人。在 Cypher 中,我会执行以下操作:
MATCH (p:Person) -[:REVIEWED]-> (m:Movie)
MATCH (p) -[:FOLLOWS]-> (p2:Person)
MATCH (p2) -[:REVIEWED]-> (m)
RETURN p, p2, m
我目前在 Gremlin 中拥有的内容:
g.V().hasLabel('person').as('p')
.out('REVIEWED').as('m')
.in('REVIEWED').as('p2')
.where(in('FOLLOWS').is(select('p'))) // this doesn't work
.select('p', 'm', 'p2')
但这行不通。我怎样才能在 Gremlin 中实现这一目标?
其实你们很亲近。试试这个
g.V().hasLabel('person').as('p')
.out('REVIEWED').as('m')
.in('REVIEWED').as('p2')
.where(in('FOLLOWS').as('p'))
.select('p', 'm', 'p2')
我们可以使用这个简单的图来测试查询
g.addV('Person').property('name','P1').as('p1').
addV('Person').property('name','P2').as('p2').
addV('Person').property('name','P3').as('p3').
addV('Movie').property('name','Shrek').as('m1').
addE('REVIEWED').from('p1').to('m1').
addE('REVIEWED').from('p2').to('m1').
addE('REVIEWED').from('p3').to('m1').
addE('FOLLOWS').from('p1').to('p3')
我们可以看到它使用 Gremlin 控制台工作
gremlin> g.V().hasLabel('Person').as('p').
......1> out('REVIEWED').as('m').
......2> in('REVIEWED').as('p2').
......3> where(__.in('FOLLOWS').as('p')).
......4> select('p', 'm', 'p2').by('name')
==>[p:P1,m:Shrek,p2:P3]