我有一个带依赖关系的图表:
dep1 -> dep2 -> ... -> dep3 -> ...
| ^
+-> dep4 |
| |
+-------------------+
我正在寻找不必要的依赖关系,即存在直接链接的依赖关系,还有通过子依赖关系的链接。在上面的示例中,链接“dep1 - > dep3”是不必要的。
找到那些的密码声明将是:
start n = node(*)
match n -[:dependency]-> n2,
n -[:dependency*2..]-> n2
with n, n2
return distinct id(n), n.name, id(n2), n2.name
我尝试使用单个gremlin语句(使用“table”-step)解决此问题,但我无法使其正常工作。这甚至是可能的还是我必须用多个陈述解决这个问题?
任何提示,提示,想法都将不胜感激。
提前致谢
答案 0 :(得分:1)
对于它的价值,这个问题在gremlin-users小组中讨论/回答:
https://groups.google.com/forum/?fromgroups=&hl=en#!topic/gremlin-users/N9NYG-aBrvw
答案 1 :(得分:0)
感谢Marko和Stephen,我们提出了这个解决方案:
g.V.transform{
s-> singleStep = [];
s.as('origin')
.out('dependency').aggregate(singleStep)
.out('dependency')
.loop(1){ true }{ true }
.retain(singleStep).as('redundant')
.dedup()
.table(new Table(), ['origin', 'redundant']){ it.name + '(' + it.id + ')' }
.cap().next()
}.filter{ it.size() > 0 }