2015-01-13 2 views
0

Running следующего запроса на мини-графике фильма, который поставляется с Neo4j броски 12 результатов, что на самом деле не так:Подсчитайте данные внутри массива недвижимости Neo4j

MATCH (actor:Person{name:"Tom Hanks"})-[role:ACTED_IN]->(movie) return count(role) as roles 

Есть на самом деле 12 отношений из «Тома Хэнкса узлов узла, но роль свойства отношения ACTED_IN на самом деле представляет собой массив, который может содержать более одного значения (у актера было более одной роли в одном фильме).

Итак, мой вопрос в том, как я могу подсчитать все значения из массива ролей, чтобы получить общее количество ролей, которые сыграл актер?

+0

Что вы имеете в виду * общее число роли актера сыграли *? – wassgren

+0

Ну, количество ролей, которые Cypher возвращается, равно 12, но это всего лишь количество фильмов, и в некоторых фильмах этот актер сыграл несколько ролей. По ручному подсчету общее количество ролей должно быть 20 –

ответ

1

Следующие должны сделать это для вас:

MATCH 
    (actor:Person {name:"Tom Hanks"})-[role:ACTED_IN]->(movie) 
WITH 
    length(role.roles) as roleCount, actor 
WITH 
    sum(roleCount) as totalRoleCount, actor 
MATCH 
    (actor)-[role:ACTED_IN]->(movie) 
WITH 
    count(role) as roles, totalRoleCount 
RETURN 
    roles, totalRoleCount 

Выход будет:

роли: 12, totalRoleCount: 20

+0

Вот оно, спасибо! –

+0

Я рад, что смог помочь! – wassgren

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