2015-01-07 194 views
1

我有一個數據庫,通過關係將玩家連接到遊戲。這段關係有一個屬性playtimeTwoWeeks,我想用它來找出每個遊戲玩過多少時間。Neo4j減少關係功能

所以我有這個疑問

MATCH (n:Player)-[p:PLAYS]-(g:Game) 
WITH n, p, g 
RETURN g, REDUCE(playtime = 0, play IN p | playtime + play.playtimeTwoWeeks) AS total_playtime 

這我不知道它的正確與否,但我不能測試它,因爲我得到的錯誤

類型不匹配:預計集但是關係(線3, 柱40)

指着p

我看到一些其他的例子,似乎我做的是正確的事情,但我無法弄清楚查詢有什麼問題。

+0

p是RELS的集合,如果你使用這樣一個可變長度的路徑:'MATCH(N:播放器) - [P:播放*] - (G:遊戲)' –

回答

2

這是怎麼回事?

MATCH (n:Player)-[p:PLAYS]-(g:Game) 
WITH n, collect(p) AS plays, g 
RETURN g, REDUCE(playtime = 0, play IN plays | playtime + play.playtimeTwoWeeks) AS total_playtime 
+0

謝謝,COLLECT()是我正在尋找的函數 – cleanunicorn

3

我不認爲你需要WITH子句在你使用它的方式。我想,你可以這樣做:

MATCH (n:Player)-[p:PLAYS]-(g:Game) 
RETURN g, SUM(p.playtimeTwoWeeks) as total_playtime 
+0

我同意,SUM()是一個更好的方法,謝謝 – cleanunicorn