簡體   English   中英

編寫SQL命令以在Edges條件下遍歷Vertex

[英]Writting SQL command to traverse Vertex on Edges conditions

想象一下以下架構 在此輸入圖像描述

假設每個邊都是“manage”類型,屬性“permissions”設置為“rw”或“r-”或“ - ”,每個頂點都是Account類型。

在這里,賬戶3無法在賬戶5中寫入,但由於賬戶1能夠在賬戶3中寫入,我希望賬戶1能夠在賬戶5中寫入。

我想要做的是一個Java函數,能夠檢查連接的用戶(帳戶1)是否能夠在作為參數給出的帳戶中寫入。 因此,我必須檢查轉到待修改帳戶的第一個邊緣是否具有寫入權限。 (希望很清楚)

我認為它有一個遞歸函數,但我想找到一種方法來使用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 
)

這將返回所有帳戶#12:1具有rw權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM