问题描述
我有一个图,其中 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()