道歉我是Graphing DB的新手!我在OrientDB中有以下基本结构:
我需要获取与给定permission
相关联的所有User
。 permission
始终包含Role
,但Role
可以直接属于User
或Team
。我还没有将其添加到图片中,但User > Role
和Team > Role
之间的边缘是has
。在User > Team
之间member
。
我目前的做法是:
SELECT permission FROM (
TRAVERSE any() FROM #23:0 WHILE $depth <=4
) WHERE @class='Role'
然而,我怀疑实现这一目标的效率要高得多。
答案 0 :(得分:1)
您可以使用命名边,而不是使用any()
进行遍历。
EG。如果user -belongsTo-> team
和user,team -hasPermission-> permission
,您可以像
SELECT FROM (
TRAVERSE out('belongsTo', 'hasPermission') FROM #23:0 WHILE $depth <=2
) WHERE @class='Role'
这样可以避免遍历不需要的分支。