2017-11-27 1 views
1

나는 회사에서 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---" 
    } 
+0

시도한 코드 또는 노력을 추가하십시오. –

답변

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 아래 예를 포함한 문서를 찾을 수 있습니다. 그래프의 순회 TEST1를 가리키는 모든 가장자리의 _key 속성을 가져 오는 데 사용됩니다

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을 삭제 예를 들어, AQL 쿼리와이를 달성하는 것도 가능합니다 모서리가 follow 컬렉션에서 제거되고 test1이 users 컬렉션에서 제거됩니다.

+0

ArongoDB는 사용 된 인터페이스가 사용되는 모든 GRAPH의 무결성을 보증합니다. GRAPH의 경우 필요한 AQL은 간단합니다. 명시 적으로 가장자리를 제거해야하는 것은 비 그래프 그래프에만 해당됩니다. – peak

1

제대로 사용되면 ArangoDB 시스템은 명명 된 그래프 (GRAPH)의 무결성을 보장합니다.

특정 사용자 (예를 들어 "사용자/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 컬렉션을 파악하여 명시 적으로 관리해야한다는 것입니다.

+0

마지막 부분에 약간의 rewording을 추가하려면 : 명시 적으로 NAMED GRAPH를 사용하면, Arango는 적절한 모서리가 삭제되도록합니다. – Virmundi

관련 문제