2017-07-11 3 views
1

Ich verwende die neueste ArangoDB 3.1 auf Windows 10.Wie entfernt man die Sammlung oder das Edge-Dokument mit der for-Schleife in ArangoDB?

Hier möchte ich das Sammlungsdokument und Edge-Dokument mit der For-Schleife entfernen. Aber ich erhalte einen Fehler wie Dokument nicht gefunden (vName).

vName enthält die vielen Sammlungsnamen. Aber ich weiß nicht, wie man es in für Schleife verwendet.

Dies ist die AQL ich die Dokumente aus dem Diagramm zu entfernen, verwenden:

LET op = (FOR v, e IN 1..1 ANY 'User/588751454' GRAPH 'my_graph' 
    COLLECT vid = v._id, eid = e._id 
    RETURN { vid, eid } 
) 

FOR doc IN op 
    COLLECT vName = SPLIT(doc.vid,'/')[0], 
      vid = SPLIT(doc.vid,'/')[1], 
      eName = SPLIT(doc.eid,'/')[0], 
      eid = SPLIT(doc.eid,'/')[1] 
    REMOVE { _key: vid } in vName 

Return output im getting from the AQL (Web UI Screenshot)

Antwort

0

vName eine Variable von COLLECT eingeführt ist. Es ist eine Zeichenfolge mit dem Sammlungsnamen eines Eckpunkts (extrahiert aus vid/v._id). Sie versuchen dann, es in der Entfernungsoperation REMOVE { ... } IN vName zu verwenden.

AQL unterstützt keine dynamischen Sammlung Namen jedoch Sammlung Namen müssen zum Zeitpunkt der Abfrage kompilieren bekannt sein:

Jeder REMOVE Betrieb auf eine einzige Sammlung beschränkt ist, und die Sammlung Name darf nicht dynamisch sein.

Quelle: https://docs.arangodb.com/3.2/AQL/Operations/Remove.html

Also, entweder Sie haben die Sammlung in die Abfrage codieren, z.B. REMOVE { ... } IN User oder verwenden Sie die spezielle Syntax bind parameter für Sammlungen, z. REMOVE { ... } IN @@coll und Bindeparameter: {"@coll": "User", ...}.

Das bedeutet auch, dass REMOVE nur Dokumente in einer einzigen Sammlung löschen kann.

Es ist möglich, die Begrenzung etwas zu umgehen, indem Sie Unterabfragen wie folgt aus: ein leeres Array als Unterabfrage Ergebnis

LET x1 = (FOR doc IN User REMOVE aa IN User) 
LET x2 = (FOR doc IN relations REMOVE bb IN relations) 
RETURN 1 

Die Variablen x1 und x2 sind syntaktisch erforderlich und empfangen. Die Abfrage erfordert auch eine RETURN-Anweisung, auch wenn wir kein Ergebnis erwarten.

Versuchen Sie nicht, zweimal aus derselben Sammlung in derselben Abfrage zu entfernen, da dies einen Zugriff nach der Datenmodifikation verursachen würde.

Verwandte Themen