2015-01-07 5 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 )

Указав на р

Я видел несколько других примеров, и кажется, что я поступаю правильно, однако я не могу понять, что не так с запросом.

+0

р представляет собой набор RELS, если вы используете переменную пути длины, как это: 'MATCH (п: Player) - [р: ИГРАЕТ *] - (г: Игра) ' –

ответ

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

Смежные вопросы