2014-01-19 3 views
5

Ich habe eine Dokumentensammlung Baumknoten enthält, und eine Kante Sammlung enthält „ist Kind“ wie folgt aus:Wie kann ich Root-Objekte in einem Arangodb-Baumdiagramm bestimmen?

Folders=[ 
{_key:"1",name:"Root1"}, 
{_key:"2",name:"Root2"}, 
{_key:"3",name:"Root1.Node1"}, 
{_key:"4",name:"Root1.Node2"}] 

FolderRelations=[ 
{_from:"Folders/3",_to:"Folders/1"}, 
{_from:"Folders/4",_to:"Folders/1"} 
] 

Jetzt würde ich die Ordner-Elemente sind Stammobjekte in diesem Baum (alle Objekte bestimmen, wie die haben keine ausgehende Beziehung).

Vielleicht bin ich ein wenig in Gedanken SQL stecken, würde Ich mag, wie etwas durchzuführen:

SELECT * 
FROM Folders 
WHERE NOT EXIST (SELECT * FROM FolderRelations WHERE FolderRelations.FromKey=Folders.Key) 

Für den Traversal und Pfad-Funktion verwenden, habe ich keinen Vertex mit zu beginnen.

Antwort

6

hier ist ein AQL Beispiel, das Ihr Problem lösen sollte:

for f in Folders 
filter LENGTH(EDGES(FolderRelations, v._id, "outbound")) == 0 
return f 

Sie erhalten eine Liste aller Scheitelpunkte, die oben in der Hierarchie keine Ordner.

aber bewusst sein: Speicher {key: 1} wird nicht den gewünschten Effekt haben, müssen Sie folgendes einstellen:

{_key: "1"} 

_key für internes Schlüsselattribut verwendet wird, und es hat eine Zeichenfolge sein.

+0

Ich habe meine Frage aktualisiert, um Ihre Bemerkung bezüglich der Einstellung von _key-Attributen zu berücksichtigen. Danke für deine Lösung, die meinem SQLish-Ansatz erstaunlich nahe kommt. – BurnedFeather