我正在公司练习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---"
}
如果使用得当,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
集合。
首先,您应该使用顶点和边集合创建一个图。使用图形时,您可以使用 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
集合中删除。