0

我的背景:

  • 小鬼蟒
  • AWS 海王星

我的问题是:

1) 鉴于我拥有要删除的顶点和边的所有特定 ID,我可以在一个事务中递归删除顶点和边吗?目的是编写评估每条边的 python 函数,并确定是否需要删除它,并链接一个 gremlin 查询以删除它。

例如:

要删除的顶点 ID:

'vertex1', 'vertex2', 'vertex3'

要删除的边缘 ID:

'edge1', 'edge2', 'edge3'

链接到 g 的 python 函数的示例如下:

def chain_drop(g, vertex_id):
    g = g.V(vertex_id).drop()
    return g

我想作为一个事务执行的链式查询理想情况下看起来像:

g.E('edge1').drop()
 .V('vertex1').drop()
 .E('edge3').drop()
 .V('vertex3').drop()
 .iterate() # execute all these queries as one transaction

以上不起作用......而且似乎我不能 .E('someid') 在我的 gremlin 查询中间。

稍微偏离主题,但我最好的尝试(非递归)如下所示:

g.E('edge1', 'edge2', 'edge3').as_('edges')
 .V('vertex1', 'vertex2', 'vertex3').as_('vertices')
 .union(__.select('edges'),
        __.select('vertices'))
 .drop()
 .iterate()

非常感谢任何帮助!

4

1 回答 1

5

你不能做你想做的事,原因有二:

  1. 没有中间遍历E(),因为它只是一个开始步骤。
  2. drop()is 杀死所有遍历器,因此它之后的中间遍历V()将永远不会被执行。

但是,您可以采取不同的方法,只需收集所有要删除的元素,然后删除它们……例如:

g.V(1).aggregate('x').V(2).aggregate('x').select('x').unfold().drop()

请注意,删除顶点也会删除边,因此如果要删除的边连接到要删除的顶点,则无需显式删除它们。

于 2018-11-22T14:45:12.950 回答