gremlin-python 在一个事务中删除多个顶点和边
gremlin-python drop multiple vertices and edges in one transaction
我的背景:
- gremlin-python
- 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
以上不起作用...而且我似乎不能在我的 gremlin 查询中间使用 .E('someid')。
稍微偏离主题,但我最好的尝试(非递归)如下所示:
g.E('edge1', 'edge2', 'edge3').as_('edges')
.V('vertex1', 'vertex2', 'vertex3').as_('vertices')
.union(__.select('edges'),
__.select('vertices'))
.drop()
.iterate()
非常感谢任何帮助!
你不能做你想做的事,原因有二:
- 没有中间遍历
E()
因为它只是一个开始步骤。
drop()
会杀死所有遍历器,因此它之后的中间遍历 V()
将永远不会被执行。
不过,您可以采用不同的方法,只需收集所有要删除的元素,然后再丢弃这些元素...例如:
g.V(1).aggregate('x').V(2).aggregate('x').select('x').unfold().drop()
请注意,删除顶点也会删除边,因此如果您要删除的那些边连接到您要删除的顶点,则无需显式删除它们。
我的背景:
- gremlin-python
- 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
以上不起作用...而且我似乎不能在我的 gremlin 查询中间使用 .E('someid')。
稍微偏离主题,但我最好的尝试(非递归)如下所示:
g.E('edge1', 'edge2', 'edge3').as_('edges')
.V('vertex1', 'vertex2', 'vertex3').as_('vertices')
.union(__.select('edges'),
__.select('vertices'))
.drop()
.iterate()
非常感谢任何帮助!
你不能做你想做的事,原因有二:
- 没有中间遍历
E()
因为它只是一个开始步骤。 drop()
会杀死所有遍历器,因此它之后的中间遍历V()
将永远不会被执行。
不过,您可以采用不同的方法,只需收集所有要删除的元素,然后再丢弃这些元素...例如:
g.V(1).aggregate('x').V(2).aggregate('x').select('x').unfold().drop()
请注意,删除顶点也会删除边,因此如果您要删除的那些边连接到您要删除的顶点,则无需显式删除它们。