我正在使用AQL为ArangoDB中的顶点和边创建一些删除查询,我认为会有一个" safe"删除顶点的方法也会删除相关的边。但我无法在文档或其他任何地方找到任何内容。以下是安全删除的最佳方法吗?
FOR e IN GRAPH_EDGES('EdgeClass',docId,{direction:'any',maxDepth:1, includeData:false})
REMOVE e._key FROM EdgeClass
结合
REMOVE docKey IN DocumentClass
此外,有没有办法使用_id
删除顶点(或边)或是否有必要使用_key
?我无法让前者工作。
答案 0 :(得分:3)
当前不通过AQL处理删除顶点。 The graph management interface offers vertex deletion functionality
programming language specific driver通常提供包装for the REST interfaces to these methods。
如果您想设计一个为您执行此操作的AQL查询,您必须知道顶点是否仅用于一个图形,以及此删除可能涉及的边缘集合的数量。您可能想要使用more modern graph traversals。让我们尝试remove eve from the knows graph:
LET keys = (
FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph' RETURN e._key)
LET r = (FOR key IN keys REMOVE key IN knows) REMOVE 'eve' IN persons
所以,我们让the traversal give us the _key
of all edges of Eve。然后,我们从knows
边集合中删除所有这些边。之后我们自己删除了Eve。
但是,您可以很容易地看到,您必须针对您的情况制作此类查询。
编辑:人们可以这样做更优雅:
LET keys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph'
REMOVE e._key IN knows)
REMOVE 'eve' IN persons
答案 1 :(得分:0)
我不停地摸索,以找出为什么@dothebart's answer对我不起作用的原因,直到我进行了实验并发现了几件事:
_key
REMOVE 'eve' IN persons
必需的字符串值@cartKey
数字转换为字符串因此,我不得不在查询中引用_key
并完全删除了bindvars。我不确定这是错误还是故意的。
LET edgeKeys = (FOR v, e IN 1..1 ANY 'cart/2648355' GRAPH 'cart_graph' RETURN e._key)
LET r = (
FOR key IN edgeKeys
REMOVE key IN store_cart OPTIONS { ignoreErrors: true }
REMOVE key IN product_cart OPTIONS { ignoreErrors: true }
)
REMOVE '2648355' IN cart