首先,我正在使用azure宇宙图数据库。
我相当了解这种模式:
out('an-edge').fold().coalesce(unfold(),addV('incoming-schedule'))
我要在合并中执行addV之后立即添加边。我一直在尝试通过一个简单的例子做到这一点:
g.V('any-vertex-id').as('a').out('an-edge').coalesce(unfold(),addV('new-vertex').addE('to-v').from('a'))
“ a”在fold()之后似乎不再存在,因为它是障碍步骤。我尝试存储和聚合,但我一定不能正确理解它们。 fold()之后是否可以获得引用?我需要它,因为它可能在查询中引用以前的addV,但我还没有ID。
答案 0 :(得分:1)
您在这里有什么要求?是否要仅在不存在out('an-edge')的情况下才创建边缘的新顶点?
如果是这样,我会尝试以下方法:
g.V('any-vertex-id').as('a').coalesce(out('an-edge'), addV('new-vertex').addE('to-v').from(select('a')))
Fold()通常在需要汇总上一步的所有输出时使用。我认为在这种情况下这不是必需的。
http://tinkerpop.apache.org/docs/current/reference/#fold-step
答案 1 :(得分:0)
看起来我可以存储,然后在添加边缘时从中选择。
g.V('any-vertex-id').store('a').out('an-edge').fold()
.coalesce(unfold(),addV('new-vertex')
.addE('to-v').from(select('a').unfold()))
不确定是否有人可以存储一个更好的选择或建议,但这似乎至少在我的情况下有效