编写 SQL 命令遍历 Vertex on Edges 条件

Writting SQL command to traverse Vertex on Edges conditions

设想以下架构

假设每条边的类型为 "manage",属性 "permissions" 设置为 "rw" 或 "r-" 或“--”,并且每个顶点的类型为 Account .

这里,账号3不能写到账号5,但是账号1可以写到账号3,所以我希望账号1可以写到账号5。

我想要做的是一个 Java 函数,该函数能够检查连接的用户(帐户 1)是否能够写入作为参数给定的帐户。 所以我必须检查去to-be-modified-account的路上的第一个边缘是否有写权限。 (希望清楚)

我认为递归函数会起作用,但我想找到一种方法来使用 SQL 命令。

我想使用类似“$depth”的关键字

select from (traverse out('manage') from #1 while $depth <= 1) where @class='Account'

我需要在某处有类似 "where permissions='rw'" 的东西,但我找不到如何用它获取 Edge 实例。

并且一旦第一个出边的条件已经实现,我将需要继续遍历这些边,不再有这个条件。

可能做不到,请告诉我

如果不够清楚请告诉我

谢谢!

create class Account extends V

create class Manage extends E
create property Manage.permissions string


create vertex Account set name = 'dummy'                    #12:0

create vertex Account set name = 'account1'                 #12:1
create vertex Account set name = 'account2'                 #12:2
create vertex Account set name = 'account3'                 #12:3
create vertex Account set name = 'account4'                 #12:4
create vertex Account set name = 'account5'                 #12:5


create edge Manage from #12:1 to #12:2 set permissions = "r-"
create edge Manage from #12:2 to #12:4 set permissions = "rw"
create edge Manage from #12:1 to #12:3 set permissions = "rw"
create edge Manage from #12:3 to #12:5 set permissions = "r-"

我相信这就是上面描述的情况。您可以:

traverse out('Manage') 
from ( 
  select expand(outE('Manage')[permissions='rw'].in) from #12:1 
)

这returns所有账户#12:1rw权限。