2013-11-27 53 views
0

我正在使用NEO4J 2.0 M6,並試圖找到最多連接的節點並按其連接降序排列它們。我從很多其他帖子嘗試了很多片段,但沒有成功。試圖找到密碼中最連接的節點

我的數據是簡單的:

create (Account1 { id:123}), 
    (Account2 { id:456}), 
    (Account3 { id:789}), 
    (Account4 { id:101}), 
    (PERMISSION1 { name: 'ChangeOneThing'}), 
    (PERMISSION2 { name: 'ChangeAnotherThing'}), 
    (PERMISSION3 { name: 'ConsumeThePlanet'}), 
    (Account1)-[:ADDED]->(PERMISSION1), 
    (Account1)-[:ADDED]->(PERMISSION2), 
    (Account2)-[:ADDED]->(PERMISSION2), 
    (Account4)-[:ADDED]->(PERMISSION2), 
    (Account3)-[:REMOVED]->(PERMISSION3) 

我需要什麼樣的結果是一樣的東西下面,因爲我想,以確定哪些是最添加權限,以便在新系統中創建分組。

PermissionName  Count 
========================== 
ChangeAnotherThing 3 
ChangeOneThing  1 

這將讓我確定已分配到賬戶,這將幫助我,以簡化現行無限定製分配到小組的權限最流行的羣體。

我很新的CYPHER,這裏是我的企圖得到它的工作:

match (account)-[:ADDED]->(permission)<-[:ADDED]-(other_account) 
return count(permission) asscore, collect(permission.name) as permissions 
order by score desc 

但是,這只是給了我:

6  ChangeAnotherThing, ChangeAnotherThing, ChangeAnotherThing, ChangeAnotherThing, ChangeAnotherThing, ChangeAnotherThing 

回答

0

如果我理解你的權利你想要的東西比如:獲取每個權限,查找所有添加了該權限的帳戶並對其進行計數,以查看使用該權限的次數。要做到這一點最簡單的方法可能是,當你創建圖形標記您的帳戶和權限,例如

CREATE (acct1:Account {id:123}), (acct2:Account {id:456}), 
    (acct3:Account {id:789}), (acct4:Account {id:101}), 
    (perm1:Permission {name:'ChangeOneThing'}), 
    (perm2:Permission {name:'ChangeAnotherThing'}), 
    (perm3:Permission {name:'ConsumeThePlanet'}), 
    (acct1)-[:ADDED]->(perm1), (acct1)-[:ADDED]->(perm2), 
    (acct2)-[:ADDED]->(perm2), (acct4)-[:ADDED]->(perm2), 
    (acct3)-[:REMOVED]->(perm3) 

,然後查詢它像這樣

MATCH (permission:Permission)<-[:ADDED]-(account:Account) 
RETURN permission.name, COUNT(account) AS score 
ORDER BY score DESC 

您不必計數或當您返回a, count(b) a成爲分組鍵時,您將獲得每行a的一行和b的聚合值。

相關問題