安全删除 ArangoDB 中的顶点(使用 _ids)?
Safe removal of vertexes in ArangoDB (using _ids)?
我正在使用 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
s 删除顶点(或边),或者是否有必要使用 _key
s?我无法让前者工作。
删除顶点目前不通过 AQL 处理。 The graph management interface offers vertex deletion functionality.
programming language specific driver usually offers wrappers for the REST interfaces to these methods.
如果您想设计一个 AQL 查询来为您执行此操作,您必须知道一个顶点是否仅在一个图中使用,以及此删除可能涉及的边集合的数量。您可能希望使用 more modern graph traversals. Lets try to 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
我绞尽脑汁想找出为什么 对我不起作用,直到我做了实验并发现了几件事:
- 我自动生成了
_key
的数字格式
REMOVE 'eve' IN persons
所需字符串值
- bindvar 没有将
@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
我正在使用 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
s 删除顶点(或边),或者是否有必要使用 _key
s?我无法让前者工作。
删除顶点目前不通过 AQL 处理。 The graph management interface offers vertex deletion functionality.
programming language specific driver usually offers wrappers for the REST interfaces to these methods.
如果您想设计一个 AQL 查询来为您执行此操作,您必须知道一个顶点是否仅在一个图中使用,以及此删除可能涉及的边集合的数量。您可能希望使用 more modern graph traversals. Lets try to 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
我绞尽脑汁想找出为什么
- 我自动生成了
_key
的数字格式 REMOVE 'eve' IN persons
所需字符串值- bindvar 没有将
@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