Gremlin:如何检查添加边是否会导致循环

Gremlin: How to check if adding an edge would result in a cycle

给定一张图,例如:

g.addV().property(id,'a').as('a').
  addV().property(id,'b').as('b').
  addV().property(id,'c').as('c').
  addE('knows').from('a').to('b').
  addE('knows').from('b').to('c').iterate();

如何检测添加边会导致循环?例如,以下操作将引入循环:

g.addE('knows').from('c').to('a').iterate();

我想在不实际添加边的情况下了解这个循环(这样我就可以防止循环)。

想到的一个想法是检查从 'a' 到 'c' 的路径是否已经存在,如果不存在,则添加边。使用一个 coalesce 步骤,它里面的第一个遍历 returns 结果将被接受。因此,如果找到 V('c') 的路径,则将返回该顶点。否则将创建并返回新边。希望即使您最终需要这种方法的变体,这也能为您提供一些帮助。

gremlin>  g.V('a').
......1>   coalesce(
......2>     repeat(out()).until(hasId('c')),
......3>     addE('knows').from(V('c')).to(V('a')))
==>v[c]