对于Orientdb,在遍历期间使用边缘

时间:2014-08-14 01:28:47

标签: orientdb

我有一个包含用户,组和网络类的数据库。用户可以拥有组或网络的边缘。组可以只有网络边缘。有三种不同类型的边缘,管理,写入和读取。

我希望能够检索用户有权访问的网络。最简单的方法是查看连接用户,组和网络的边缘。我正在尝试以下方法:

select from (traverse out() from <User Record RID> 
                            while $depth <=2 
                            AND ( (@class = 'group' AND <edgeType = write>
                                 OR (@class = 'network' AND <edgeType = read>) 
                                 OR @class ='user') ) 
       where @class = 'network'

如何编写布尔值

 <edgeType = write> 

在当前遍历的上下文中。

1 个答案:

答案 0 :(得分:2)

从一个顶点(你从顶点跳到顶点,用out()跳过边缘)你可以使用inE()来获取传入边和outE()。所以尝试添加:

inE().@class = 'WriteEdge'

如果每个边缘类型有一个类(建议)。或者您也可以这样做:

inE('WriteEdge').size() > 0

否则,您无法在遍历中跳过边但是遍历顶点和边,添加了与边和顶点匹配的WHILE条件。例如:

select from (traverse outV(), outE() from <User Record RID> 
                        while $depth <=4 
                        AND ... )
   where @class = 'network'

另一个选项是向前移动并使用函数检查遍历的顶点和边缘:

  • traversedVertex()
  • traversedEdge()
  • traversedElement()

使用-1来获取最后一次遍历。 -2前一个,等等。