删除另一个集合中的文档时如何将边集合文档一起删除?

问题描述 投票:0回答:2

我正在公司练习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
2个回答
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
集合。


0
投票

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

您可以在https://docs.arangodb.com/3.11/develop/http/graphs/named-graphs/#remove-a-vertex

下找到包含示例的文档

也可以通过 AQL 查询来实现此目的,例如从用户集合中删除 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
集合中删除。

© www.soinside.com 2019 - 2024. All rights reserved.