3

我正在使用 AQL 为 ArangoDB 中的顶点和边创建一些删除查询,并且我认为将有一种“安全”的方式来删除也会删除关联边的顶点。但我在文档或其他任何地方都找不到。以下是进行安全删除的最佳方法吗?

FOR e IN GRAPH_EDGES('EdgeClass',docId,{direction:'any',maxDepth:1, includeData:false})
    REMOVE e._key FROM EdgeClass

结合

REMOVE docKey IN DocumentClass

另外,有没有办法使用 s 删除顶点(或边),_id或者是否有必要使用_keys?我无法让前者工作。

4

2 回答 2

3

目前不通过 AQL 处理删除顶点。图形管理界面提供顶点删除功能

特定于编程语言的驱动程序通常为这些方法的 REST 接口提供包装器。

如果您想设计一个为您执行此操作的 AQL 查询,您必须知道一个顶点是否仅用于一个图中,以及此删除可能涉及的边集合的数量。您可能想要使用更现代的图遍历。让我们尝试从 know 图中删除 eve

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

所以,我们让遍历给我们_keyEve 的所有边。然后我们从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
于 2016-01-29T14:11:53.800 回答
0

我猛地想知道为什么@dothebart 的答案对我不起作用,直到我做了实验并发现了几件事:

  • _key我以数字格式自动生成
  • REMOVE 'eve' IN persons所需的字符串值
  • bindvar 没有将@cartKey数字转换为字符串

结果我不得不_key在查询中引用并完全删除了绑定变量。我不确定这是错误还是设计使然。

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
于 2019-06-29T15:48:57.777 回答