簡體   English   中英

ORIENTDB:遍歷/具有屬性的邊

[英]ORIENTDB: traverse / edges with attributes

我在圖形數據庫中有一個與應用程序許可相關的問題。 結構如下...我必須閱讀與節點相關的用戶角色。 節點按層次結構組織,角色作為邊緣提供,其中包含類型屬性和關系User-> UserRole {type:xyz}-> Node

create class User extends V    
create class Node extends V  
create class has_father extends E
create class UserRole extends E

create vertex User set name = 'u1'
create vertex User set name = 'u2'
create vertex User set name = 'u3'   



create vertex Node set name = 'n1'
create vertex Node set name = 'n11'
create vertex Node set name = 'n12'
create vertex Node set name = 'n111'    
create vertex Node set name = 'n112'
create vertex Node set name = 'n1111'
create vertex Node set name = 'n1112'
create vertex Node set name = 'n11111'
create vertex Node set name = 'n11112'

create edge has_father from (select from Node where name = 'n11') to (select from Node where name = 'n1')
create edge has_father from (select from Node where name = 'n12') to (select from Node where name = 'n1')
create edge has_father from (select from Node where name = 'n111') to (select from Node where name = 'n11')
create edge has_father from (select from Node where name = 'n112') to (select from Node where name = 'n11')
create edge has_father from (select from Node where name = 'n1111') to (select from Node where name = 'n111')
create edge has_father from (select from Node where name = 'n1112') to (select from Node where name = 'n111')
create edge has_father from (select from Node where name = 'n11111') to (select from Node where name = 'n1111')
create edge has_father from (select from Node where name = 'n11112') to (select from Node where name = 'n1111')

create edge UserRole from (select from User where name = 'u1') to (select from Node where name = 'n1') set type = 'admin'
create edge UserRole from (select from User where name = 'u1') to (select from Node where name = 'n11') set type = 'read'
create edge UserRole from (select from User where name = 'u2') to (select from Node where name = 'n111') set type = 'write'
create edge UserRole from (select from User where name = 'u1') to (select from Node where name = 'n11111') set type = 'test'

實際上,我現在必須從“ n”讀取所有子級,並獲取用戶“ u1”的節點和UserRole:

詢問“ u1”和“ n1”:

n11 read
n12 admin

詢問“ u1”和“ n1111”:

n11111 test
n11112 read

這意味着最多分配了1個UserRole,並且該值可能在樹中被覆蓋。 用戶可能是root級別的管理員,並且只能從n11級別開始讀取。

如何讀取通過父@rid(或過濾器)的子節點以及為特殊用戶計算的角色?

在第二個示例中嘗試使用以下SQL:

select name as Name, $a.type[0] as Role from (select expand(in('has_father')) from (select from Node where name = 'n1111') unwind in)

let $a=(select inE('UserRole').type as type from (
            traverse out('has_father'),in('UserRole') from $parent.$current while out('UserRole').@rid <> #21:0
            ) where in('UserRole').@rid = #21:0
            limit 1
        )

其中#21:0是u1 @rid。

只要不是那么漂亮,就可以將其插入JS函數並將其參數化。


在此處輸入圖片說明 在此處輸入圖片說明

暫無
暫無

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

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