通过带有 java 的 orient-db 图 运行 有哪些不同的方法?
What are the different ways to run through an orient-db graph with java?
让我们想象下图:
让我们假设每个顶点都是一种类型 "Account",除了客户端是一种类型..."Client" 或其他类型。
假设 Edge "supervise" 允许老板访问其经理的所有信息。
"frames" 允许经理访问他的实习生的所有信息。
最后,belongs_to允许实习生查看客户信息。
从一个账号开始,我想知道这个账号是否可以访问特定的客户端。允许某些 Edge 的某些方向并禁止其他方向...例如,可以通过 Edge 监督方式:OUT ---> IN 但不是 IN ---> OUT。
但对于 belongs_to,IN---> OUT 是可能的。
从Java开始,我想到了一个递归函数,但在某些情况下可能很难避免冗余和无限递归,而且似乎有很多条件需要管理。
从 SQL 命令我们可以做类似的事情:
SELECT EXPAND(SET(OUT('supervise').OUT('frames').IN('belongs_to'))) FROM #Boss_id
我认为它会 return 一个客户列表,我们可以检查所需客户的存在。但这只适用于老板,而对于经理我只会这样做:
SELECT EXPAND(SET(OUT('frames').IN('belongs_to'))) FROM #Manager_id
我真的不知道如何概括这个命令。
所以我的问题是:
是否有 "easy" 方式通过图表 运行,Java API 或任何推荐的方式?
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[= 时,才会返回 client1 21=]、#12:2 或 #12:4.
让我们想象下图:
让我们假设每个顶点都是一种类型 "Account",除了客户端是一种类型..."Client" 或其他类型。
假设 Edge "supervise" 允许老板访问其经理的所有信息。 "frames" 允许经理访问他的实习生的所有信息。 最后,belongs_to允许实习生查看客户信息。
从一个账号开始,我想知道这个账号是否可以访问特定的客户端。允许某些 Edge 的某些方向并禁止其他方向...例如,可以通过 Edge 监督方式:OUT ---> IN 但不是 IN ---> OUT。
但对于 belongs_to,IN---> OUT 是可能的。
从Java开始,我想到了一个递归函数,但在某些情况下可能很难避免冗余和无限递归,而且似乎有很多条件需要管理。
从 SQL 命令我们可以做类似的事情:
SELECT EXPAND(SET(OUT('supervise').OUT('frames').IN('belongs_to'))) FROM #Boss_id
我认为它会 return 一个客户列表,我们可以检查所需客户的存在。但这只适用于老板,而对于经理我只会这样做:
SELECT EXPAND(SET(OUT('frames').IN('belongs_to'))) FROM #Manager_id
我真的不知道如何概括这个命令。
所以我的问题是:
是否有 "easy" 方式通过图表 运行,Java API 或任何推荐的方式?
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[= 时,才会返回 client1 21=]、#12:2 或 #12:4.