我有一个包含用户,组和网络类的数据库。用户可以拥有组或网络的边缘。组可以只有网络边缘。有三种不同类型的边缘,管理,写入和读取。
我希望能够检索用户有权访问的网络。最简单的方法是查看连接用户,组和网络的边缘。我正在尝试以下方法:
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>
在当前遍历的上下文中。
答案 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'
另一个选项是向前移动并使用函数检查遍历的顶点和边缘:
使用-1来获取最后一次遍历。 -2前一个,等等。