2014-01-19 40 views
5

我有一個文件集合包含樹節點和含有邊緣集「是孩子」是這樣的:如何確定arangodb樹形圖中的根對象?

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"} 
] 

現在我想以確定哪些文件夾項目是在樹的根對象(即擁有的所有對象沒有出站關係)。

也許,我有點陷在思考的SQL,我想開展類似:

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

對於使用遍歷和路徑的功能,我沒有頂點下手。

回答

6

這裏是一個應該解決您的問題的AQL例如:

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

你會得到有上述層次結構中沒有文件夾中所有的頂點列表。

但要注意: 節省{關鍵:1}將不會收到預期的效果,你必須設置:

{_key: "1"} 

_key用於內部關鍵屬性,它必須是一個字符串。

+0

我更新了我的問題,以反映您有關設置_key屬性的評論。感謝您的解決方案,它出人意料地接近我的SQLish方法。 – BurnedFeather