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

xvw2m8pv  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(134)

我在公司里练习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"
  }

关注收藏[edge]

{
    "_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---"
  }
wtlkbnrh

wtlkbnrh1#

如果使用得当,ArangoDB系统可以确保命名图(GRAPHs)的完整性。
要在follow中手动删除一个特定的用户(比如“users/test 4”)和相应的边,沿着下面的行执行AQL查询就足以删除边:

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

假设“users/test 4”没有在其他地方引用,则可以安全地删除节点,例如通过

REMOVE "test4" in users

这里重要的一点是,当手动删除节点时,所有相关的edge集合都必须被显式地标识和管理。

fykwrbwg

fykwrbwg2#

首先,您应该创建一个图形与您的顶点和边集合。使用图形时,您可以使用REST API来移除顶点。这样,指向该顶点的所有边和顶点本身都将被删除。
您可以在https://docs.arangodb.com/3.11/develop/http/graphs/named-graphs/#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集合中移除。

相关问题