让我们想象下面的图表:
假设每个Vertex都是一个类型“Account”,除了客户端是一个类型......“Client”或者其他什么。
假设Edge“监督”允许Boss访问其管理者的所有信息。 “框架”允许管理员访问其实习生的所有信息。 最后,belongs_to允许实习生查看客户信息。
从帐户开始,我想知道此帐户是否可以访问特定客户端。允许某些边缘的某些方向并禁止其他边缘......例如,可以通过边缘监督方式:OUT ---> IN但不是IN ---> OUT。
但是对于belongs_to,IN ---> OUT是可能的。
从Java做起,我在想一个递归函数,但在某些情况下可能很难避免冗余和无限递归,而且似乎需要管理很多条件。
从SQL命令我们可以做类似的事情:
SELECT EXPAND(SET(OUT('supervise').OUT('frames').IN('belongs_to'))) FROM #Boss_id
我认为它会返回一个客户列表,我们可以检查所需客户端的存在。但这只适用于老板,对于经理我只会这样做:
SELECT EXPAND(SET(OUT('frames').IN('belongs_to'))) FROM #Manager_id
我真的没有看到如何概括这个命令。
所以我的问题是:
是否有一种“简单”的方式来运行图形,Java API或任何推荐的方式?
答案 0 :(得分:1)
create class Account extends V
create class Client extends V
create class Supervise extends E
create class Frames extends E
create class BelongsTo extends E
create vertex Account set name = 'boss' #12:0
create vertex Account set name = 'manager1' #12:1
create vertex Account set name = 'manager2' #12:2
create vertex Account set name = 'intern1' #12:3
create vertex Account set name = 'intern2' #12:4
create vertex Client set name = 'client1'
create edge Supervise from #12:0 to [#12:1, #12:2]
create edge Frames from #12:2 to [#12:3, #12:4]
create edge BelongsTo from #13:0 to #12:4
我相信这是上述情况。 你可以:
select from (
traverse out('Supervise'), out('Frames'), in('BelongsTo') from <rid>
) where @class = 'Client'
请注意,仅当您将 rid 替换为#12:0 ,#12:2时,才会返回 client1 或#12:4 。