Gremlin drop 只删除子图的第一个顶点

问题描述

我有一个图,其中 A 通过边连接到 B、C、D。
我正在使用以下内容删除 A 及其连接的顶点。

g.V('A').
  union(__(),repeat(out()).emit()).drop()

但它只删除A.
当我在没有 drop() 的情况下运行它时,它返回所有子图顶点的列表。
我使用的是 tinkerpop 控制台/服务器版本 3.4.9。

解决方法

在调用drop之前需要收集union step的结果。这是稍微修改的查询。

gremlin> g.addV('A').as('a').
......1>   addV('B').as('b').
......2>   addV('C').as('c').
......3>   addV('D').as('d').
......4>   addE('knows').from('a').to('b').
......5>   addE('knows').from('b').to('c').
......6>   addE('knows').from('c').to('d') 
==>e[41][37-knows->38]


gremlin>   g.V().hasLabel('A').
......1>   union(identity(),......2>     repeat(out()).emit()).fold() 
==>[v[35],v[36],v[37],v[38]]


gremlin>   g.V().hasLabel('A').
......1>   union(identity(),......2>     repeat(out()).emit()).fold().unfold().drop()   

gremlin> g

==>graphtraversalsource[tinkergraph[vertices:0 edges:0],standard]

另请注意,通过将 union 移动到 emit 之前并使用 repeat,无需执行 store 步骤即可完成此操作。

g.V().hasLabel('A').
  emit().
  repeat(store('v').out()).
  cap('v').
  unfold().
  drop()