Gremlin 指定顶点列表可以到达的顶点列表
这是我的图表的样子Gremlin 指定顶点列表可以到达的顶点列表,gremlin,tinkerpop3,gremlin-server,Gremlin,Tinkerpop3,Gremlin Server,这是我的图表的样子 g = TinkerGraph.open().traversal() school1 = g.addV('school').property('id', '1').next() school2 = g.addV('school').property('id', '2').next() student1 = g.addV('student').property('id', '3').next() student2 = g.addV('student').property('i
g = TinkerGraph.open().traversal()
school1 = g.addV('school').property('id', '1').next()
school2 = g.addV('school').property('id', '2').next()
student1 = g.addV('student').property('id', '3').next()
student2 = g.addV('student').property('id', '4').next()
g.addE('students').from(school1).to(student1)
g.addE('students').from(school1).to(student2)
g.addE('students').from(school2).to(student1)
我想找出两所学校共有的学生。为了扩展这个逻辑,如果我想为它编写一个通用的无限遍历逻辑,会发生什么呢
gremlin> g.V(school1).out('students').filter(__.in('students').is(school2)).valueMap(true)
==>[id:4,label:student,id:[3]]
不过,我不确定你所说的“为相同的对象编写一个通用的无限遍历逻辑”是什么意思
不过,我不确定“为相同的对象编写通用无限遍历逻辑”是什么意思。这是可行的
gremlin> schools = [ '1', '2' ]
==>1
==>2
gremlin> g.V().
......1> has('school', 'id', within(schools)).
......2> out('students').
......3> groupCount().by('id').
......4> unfold().
......5> filter( select(values).is(eq(schools.size())) ).
......6> select(keys)
==>3
- 从学校名单开始。假设学校比学生少,可能是安全的
- 将
从学校传给学生。在这一点上,一个学生在流中出现多次,他们所就读的每一所学校出现一次。我假设一所特定的学校和一个特定的学生之间只有一个优势out()
- 执行
创建一个映射,其中对于每个条目,groupCount()
是学生id,键
是学生的学校数量值
- 使用
对地图中的条目进行操作unfold()
仅选择连接到列表中所有学校的学生,即学生的过滤器
计数等于列表中的学校数值
- 最后
返回学生id作为结果选择(键)
gremlin> schools = [ '1', '2' ]
==>1
==>2
gremlin> g.V().
......1> has('school', 'id', within(schools)).
......2> out('students').
......3> groupCount().by('id').
......4> unfold().
......5> filter( select(values).is(eq(schools.size())) ).
......6> select(keys)
==>3
- 从学校名单开始。假设学校比学生少,可能是安全的
- 将
从学校传给学生。在这一点上,一个学生在流中出现多次,他们所就读的每一所学校出现一次。我假设一所特定的学校和一个特定的学生之间只有一个优势out()
- 执行
创建一个映射,其中对于每个条目,groupCount()
是学生id,键
是学生的学校数量值
- 使用
对地图中的条目进行操作unfold()
仅选择连接到列表中所有学校的学生,即学生的过滤器
计数等于列表中的学校数值
- 最后
返回学生id作为结果选择(键)