包括 root 在内的 Gremlin BFS 枚举

Gremlin BFS enumeration including root

我想在以下 Gremlin 表达式的输出中包含根节点:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).as('x').out.loop('x'){true}{true}
==>v[2]
==>v[4]
==>v[3]
==>v[5]
==>v[3]

因此输出也包括 v[1]。我怎样才能做到这一点?

在 TinkerPop 中有几个可能的解决方案 2.x 第一个使用 store():

gremlin> x=[];g.v(1).store(x).as('x').out.loop('x'){true}{true}.store(x).iterate();x        
==>v[1]
==>v[3]
==>v[2]
==>v[4]
==>v[3]
==>v[5]

这是第二个没有明确强制创建使用 transform 和闭包的外部变量:

gremlin> g.v(1).transform{[it] + (it._().as('x').out.loop('x'){true}{true}.toList())}.scatter()    
==>v[1]
==>v[3]
==>v[2]
==>v[4]
==>v[3]
==>v[5]

对于使用 TinkerPop 3.x 的用户,只需将 emit() 放在 repeat() 前面:

gremlin> g.V(1).emit().repeat(out())
==>v[1]
==>v[3]
==>v[2]
==>v[4]
==>v[5]
==>v[3]