2017-11-27 3 views
1

Ich praktiziere Arangodb in Gesellschaft. Wenn ich die folgende Beziehung zwischen dem Benutzer und dem Benutzer ausdrücken möchte, möchte ich die Daten der entsprechenden folgenden Beziehung löschen, wenn ein Benutzer gelöscht wird.beim Löschen von Dokumenten in einer anderen Sammlung. Wie wird das Kantensammlungsdokument zusammen gelöscht?

Benutzer Sammlung

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

Folge Sammlung [Rand]

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

Bitte Code oder Aufwand hinzufügen, für die Sie es versucht haben? –

Antwort

0

Zuerst sollten Sie ein Diagramm mit Vertex und Kanten Sammlung erstellen. Wenn Sie mit Grafiken arbeiten, können Sie die REST-API verwenden, um einen Stützpunkt zu entfernen. Auf diese Weise werden alle Kanten, die auf diesen Eckpunkt und den Eckpunkt selbst zeigen, entfernt.

DELETE /_api/gharial/{graph-name}/vertex/{collection-name}/{vertex-key}

Sie können die Dokumentation einschließlich eines Beispiels unter https://docs.arangodb.com/3.2/HTTP/Gharial/Vertices.html#remove-a-vertex finden.

Es ist auch möglich, dies mit einer AQL-Abfrage zu erreichen, zum Beispiel test1 aus dem Benutzer Sammlung zu löschen:

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 

Ein Graph Traversal verwendet wird _key Attribute aller Kanten zu test1 zeigen zu bekommen, dann diesem Kanten werden aus der follow Sammlung entfernt und test1 wird aus der users Sammlung entfernt.

+0

ArongoDB soll die Integrität jedes GRAPH sicherstellen, egal welche Schnittstelle verwendet wird. Für ein GRAPH ist die erforderliche AQL trivial. Nur für Nicht-GRAPH-Graphen ist das explizite Entfernen von Kanten erforderlich. – peak

1

Bei korrekter Verwendung gewährleistet das ArangoDB-System die Integrität der benannten Graphen (GRAPHs).

Um einen bestimmten Benutzer zu löschen (zB „Benutzer/test4“) und die entsprechenden Kanten in follow manuell eine AQL-Abfrage an den folgenden Zeilen sollte die Kanten zu löschen ausreicht, um:

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

„Benutzer Unter der Annahme/test4 "wird nicht an anderer Stelle referenziert, der Knoten kann dann sicher gelöscht werden, z von

REMOVE "test4" in users 

Der wichtige Punkt hier ist, dass, wenn sie manuell Knoten löschen, alle relevanten edge Sammlungen müssen explizit identifiziert und verwaltet werden.

+0

Um dem letzten Teil ein wenig Umformulierung hinzuzufügen: Wenn Sie explizit ein NAMED GRAPH verwenden, wird Arango sicherstellen, dass die entsprechenden Kanten gelöscht werden. – Virmundi

Verwandte Themen