我正在公司练习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---"
}
答案 0 :(得分: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
假设"用户/ test4"如果未在别处引用,则可以安全地删除该节点,例如,由
REMOVE "test4" in users
重要的一点是,在手动删除节点时,必须明确标识和管理所有相关的edge
集合。
答案 1 :(得分:0)
首先,您应该使用顶点和边集合创建图形。使用图表,您可以使用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
集合中删除这些边,并从users
集合中删除test1。 / p>