安全移除ArangoDB中的顶点(使用_ID)?

安全移除ArangoDB中的顶点(使用_ID)?,arangodb,aql,Arangodb,Aql,我正在使用AQL为ArangoDB中的顶点和边创建一些删除查询,我假设有一种“安全”的方法来删除顶点,同时删除关联的边。但我在文档或其他任何地方都找不到。以下是安全删除的最佳方法吗 FOR e IN GRAPH_EDGES('EdgeClass',docId,{direction:'any',maxDepth:1, includeData:false}) REMOVE e._key FROM EdgeClass 结合 REMOVE docKey IN DocumentClass 另外

我正在使用AQL为ArangoDB中的顶点和边创建一些删除查询,我假设有一种“安全”的方法来删除顶点,同时删除关联的边。但我在文档或其他任何地方都找不到。以下是安全删除的最佳方法吗

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

REMOVE docKey IN DocumentClass

另外,是否有方法使用
\u id
s删除顶点(或边),或者是否有必要使用
\u键
s?我无法使前者工作。

删除顶点当前无法通过AQL处理

该公司通常提供包装

如果您想设计一个AQL查询来实现这一点,您就必须知道一个顶点是否只在一个图中使用,以及此删除可能涉及的边集合的数量。您可能想使用。让我们试着:

所以,我们就让这个。然后,我们从
knows
边集合中删除所有这些边。然后我们把夏娃带走

然而,您可以很容易地看到,您必须针对您的情况精心设计这样一个查询

编辑:您可以像这样做得更优雅一点:

LET keys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph'
            REMOVE e._key IN knows)
  REMOVE 'eve' IN persons

我绞尽脑汁想弄清楚为什么不适合我,直到我做了实验,发现了几件事:

  • 我已经自动生成了数字格式的
    \u键
  • 删除人物中的“eve”
    所需字符串值
  • bindvar未将
    @cartKey
    数字转换为字符串
因此,我不得不在查询中引用
\u键
,并完全删除了bindvar。我不确定这是一个bug还是出于设计

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

谢谢我在节点中使用arangojs,所以我尝试了以下函数:。但是,它似乎仍然没有删除相邻的边。知道我做错了什么吗?只需使用curl调用REST接口,即可删除顶点和相邻边。在上一次次要版本中,该函数的行为发生了更改,以匹配预期的行为。它以前只使用原始集合API,这可能会导致悬空边,现在它使用图形集合API。你能确保你使用的是最新版本的arangojs吗?是的,问题是没有使用最新的arangojs。谢谢我在ArangoDB文档中看到:>“数据修改查询仅限于每个查询修改单个集合中的数据。这意味着数据修改查询无法使用单个查询修改多个集合中的数据。”我想知道文档是否已过期,如果确实可以在一个AQL查询中删除多个集合中的文档?是的,它同时已被删除。文档需要修复。
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