样本图:Tinker Modern

查询:在第二跳中找到Marko的所有直接朋友(person顶点)和(联合)所有software



尝试失败:


  一级人员的通用查询:


g.V(1).hasLabel("person").repeat(both()).times(1).emit(hasLabel("person")).hasLabel("person").values("name")



  二级/跃点软件的通用查询:


g.V(1).hasLabel("person").repeat(both()).times(2).emit(hasLabel("software")).hasLabel("software").values("name")



  尝试合并以上两个查询:


g.V(1).hasLabel("person").repeat(both()).times(1).emit(hasLabel("person")).hasLabel("person").repeat(both()).times(2).emit(hasLabel("software")).hasLabel("software").values("name")


我并不真正了解union的工作原理,因为它没有合并数据。

g.V(1).union().V(2)
g.V(1).union(V(2))


到现在为止,我最好的是,但是我想要某种能力(标记连接到人的ANDO或标记连接到软件的人):

gremlin> g.V(1).store('x').V(2).store('y').cap('x', 'y')
==>[x:[v[1]],y:[v[2]]]

最佳答案

对于第一级:

gremlin> g.V(1).hasLabel("person").as("from", "to1", "to2")
            .repeat(both()).times(1).emit(hasLabel("person")).hasLabel("person").as("to1")
            .select("from")
            .repeat(both()).times(1).emit(hasLabel("software")).hasLabel("software").as("to2")
            .project("from", "person", "software")
            .by(select("from").by("name"))
            .by(select("to1").by("name"))
            .by(select("to2").by("name"))


结果:

==>[from:marko,person:vadas,software:lop]
==>[from:marko,person:josh,software:lop]


对于多级递增,times的值

10-07 21:08