我正在尝试构建一个图表来存储用户朋友的时间变化。在下图中,我想得到所有关注者,他们在特定日期(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开始我想
答案 0 :(得分:0)
如果v1
,v2
和d1
是顶点(不仅仅是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)
但是,如果v1
,v2
和d1
只是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))