2014-01-19 21 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