编写 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:1有rw权限。
设想以下架构
假设每条边的类型为 "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:1有rw权限。