【问题标题】:when delete document in another collection How to delete edge collection document together?删除另一个集合中的文档时如何一起删除边缘集合文档?
【发布时间】:2017-11-27 06:28:09
【问题描述】:

我正在公司练习 arangodb。 当我想表达用户和用户之间的跟随关系时,我想在删除一个用户时删除对应的跟随关系的数据。

用户集合

{
    "_key": "test4",
    "_id": "users/test4",
    "_rev": "_V8yGRra---"
  },
  {
    "_key": "test2",
    "_id": "users/test2",
    "_rev": "_V8whISG---"
  },
  {
    "_key": "test1",
    "_id": "users/test1",
    "_rev": "_V8whFQa---"
  },
  {
    "_key": "test3",
    "_id": "users/test3",
    "_rev": "_V8yoFWO---",
    "userKey": "test3"
  }

关注收藏[边缘]

{
    "_key": "48754",
    "_id": "follow/48754",
    "_from": "users/test1",
    "_to": "users/test2",
    "_rev": "_V8wh4Xe---"
  }
  {
    "_key": "57447",
    "_id": "follow/57447",
    "_from": "users/test2",
    "_to": "users/test3",
    "_rev": "_V8yHGQq---"
  }

【问题讨论】:

  • 请添加您尝试过的代码或努力?

标签: graph-databases arangodb referential-integrity


【解决方案1】:

如果使用得当,ArangoDB 系统可确保命名图 (GRAPH) 的完整性。

要手动删除特定用户(例如“users/test4”)和follow 中的相应边,按照以下行的 AQL 查询应该足以删除边:

for v,e IN 1..1 ANY "users/test4" follow
  REMOVE e IN follow
  COLLECT WITH COUNT INTO counter
  RETURN counter

假设“users/test4”未在其他地方引用,则可以安全地删除该节点,例如由

 REMOVE "test4" in users

这里的重点是,在手动删除节点时,必须明确识别和管理所有相关的edge 集合。

【讨论】:

  • 在最后一部分添加一些改写:如果您明确使用 NAMED GRAPH,Arango 将确保删除适当的边缘。
【解决方案2】:

首先,您应该使用您的顶点和边集合创建一个图形。使用图形,您可以使用 REST API 删除顶点。这样所有指向这个顶点的边和顶点本身都会被删除。

DELETE /_api/gharial/{graph-name}/vertex/{collection-name}/{vertex-key}

您可以在https://docs.arangodb.com/3.2/HTTP/Gharial/Vertices.html#remove-a-vertex 下找到包含示例的文档。

也可以通过 AQL 查询来实现这一点,例如从 users 集合中删除 test1:

LET keys = (
  FOR v, e IN 1..1 ANY 'users/test1' GRAPH 'your-graph-name' RETURN e._key)
    LET r = (FOR key IN keys REMOVE key IN follow) REMOVE 'test1' IN users

使用图遍历获取所有指向test1的边的_key属性,然后将这些边从follow集合中移除,并将test1从users集合中移除。

【讨论】:

  • ArongoDB 声称要确保每个 GRAPH 的完整性,无论使用哪种接口。因此,对于 GRAPH,所需的 AQL 是微不足道的。只有非 GRAPH 图才需要显式删除边。
猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多