使用gremlin查询删除父节点时,如何删除所有子节点? [英] How to delete all child nodes when parent node deleted using the gremlin query?
本文介绍了使用gremlin查询删除父节点时,如何删除所有子节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要求在使用gremlin查询删除父节点时删除所有子节点。
假设
A
/
B C
/
D E
/
F G
/
H I
如果我们要删除"B"顶点,那么它的子"D"、"E"、"F"、"G"、"H"和"amp;I"顶点也应该删除。请告诉我如何删除。
推荐答案
我假设"B"是名为"myid"的索引属性:
g.V().has('myId','B').
union(__(),
repeat(out()).emit()).
drop()
使用union()
做两件事,因为在本例中它有两个参数。第一个是__()
。这只是一个身份函数。它在删除顶点的结果中包含"B"顶点。换句话说,union()
接收"B"顶点作为其输入,我们除了将其包含在union()
的结果中外,不对其执行任何操作。union
的第二个参数获取"B"顶点,并递归遍历以查找所有子顶点。这里使用emit()
很重要,因为它告诉重复返回沿途找到的所有子顶点(而不仅仅是树的叶子)。
__()
在其.NET客户端中不受Microsoft版本的Gremlin支持。希望他们正在努力做到这一点。我想你可以用这个丑陋的东西来解决这个问题(或者我想是类似的东西):
g.V().has('myId','B').
union(fold().unfold(),
repeat(out()).emit()).
drop()
另一种方法可能是使用store()
:
g.V().has('myId','B').
store('d').
repeat(out().store('d')).
cap('d').
unfold().
drop()
store
方法不如前面的方法好,因为它必须在内存中构建一个List
,您可以使用cap()
从"d"副作用中提取该List
,然后将该列表展开回要删除的迭代器。
这篇关于使用gremlin查询删除父节点时,如何删除所有子节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文