如何将顶点连接(有一条路径)到3个顶点

时间:2017-06-26 12:31:05

标签: gremlin

我正在尝试构建一个图表来存储用户朋友的时间变化。在下图中,我想得到所有关注者,他们在特定日期(d1)跟随V1和V2(交集),即顶点v3,因为它连接到v1和v2连接到d1

我尝试从v2< -follows-t2< -follows< -x-> follow-> t1-follow-> v1开始查询,但我不知道如何将d1节点连接为这会在t2上拆分路径。

g.V(v2_id).inE('follows').otherV().as_('t2').inE('follows').otherV().as_('v3').outE('follows').otherV().as_('t1').outE('follows').otherV().hasId(v1_id).select('v3')

你能不能给我一个提示或gremlin技巧我如何指定t2和t1应该由d1链接

d1,v1和v2的ID已知,所以我也可以从d1开始我想

enter image description here

1 个答案:

答案 0 :(得分:0)

如果v1v2d1是顶点(不仅仅是ID):

g.V(v1, v2).as("a").in("follows").
  filter(out("of_day").is(d1)).in("follows").
  group().by().by(select("a").fold()).unfold().
  and(select(values).unfold().is(v1),
      select(values).unfold().is(v2)).
  select(keys)

但是,如果v1v2d1只是ids,那就差别不大了:

g.V(v1, v2).as("a").in("follows").
  filter(out("of_day").hasId(d1)).in("follows").
  group().by().by(select("a").fold()).unfold().
  and(select(values).unfold().hasId(v1),
      select(values).unfold().hasId(v2)).
  select(keys)

如果可以有超过2个输入,则上述查询是好的。如果总是只有2个输入,那么以下查询应该更有效:

g.V(v1).in("follows").
  filter(out("of_day").is(d1)).
  in("follows").
  filter(out("follows").filter(out("of_day").is(d1)).
         out("follows").is(v2))