2015-01-07 255 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