Массивы свойств узла Neo4j для создания отношений - PullRequest
0 голосов
/ 04 ноября 2018

Мне очень нравится Neo4j, но я застрял в этой маленькой проблеме. Мои данные имеют узлы фильма, узлы актеров и отношения ACTED_IN. Например:

(a:Actor {name: 'Leonardo DiCaprio'})-[r:ACTED_IN]->(m:Movie {name: 'Titanic'})

Но в некоторых фильмах актеры вложены в виде массива с разделителями-запятыми в свойстве cast. Например:

(m:Movie {name: 'Oceans Eleven',  
   cast: 'George Clooney,Brad Pitt,Andy García,Julia Roberts,Matt Damon'})

Как преобразовать свойства приведения в уникальные отношения ACTED_IN?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вот один подход, который также избегает создания дублирующих узлов и отношений:

MATCH (m:Movie {name: 'Oceans Eleven'})
FOREACH(c IN SPLIT(m.cast, ',') |
  MERGE (a:Actor {name: c})
  MERGE (a)-[r:ACTED_IN]->(m)
);
0 голосов
/ 04 ноября 2018

В этом запросе необходимо использовать SPLIT () и UNWIND :

MATCH (m:Movie {title: 'Oceans Eleven'}) 
WITH m, SPLIT(m.cast, ',') AS list_actors
UNWIND list_actors AS actor
MERGE (m)<-[:ACTED_IN]-(:Actor{name: actor})

И тогда вы можете проверить результат:

MATCH p=(m:Movie {title: 'Oceans Eleven'})-[]-(n) RETURN p

enter image description here

...