NEO4J: получите фильмы, в которых некоторые актеры данного актера не сыграли - PullRequest
0 голосов
/ 13 ноября 2018

Используя график фильма, у меня следующий вопрос: movies where Keanu Reeves AND Robin Williams did not act?

Для решения этой проблемы у меня есть два запроса:

MATCH (m:Movie)<-[:ACTED_IN]-(p:Person)
WITH m, collect(p) as actors
WHERE NONE (actor in actors WHERE actor.name IN ['Keanu Reeves', 'Robin Williams','Frank Langella'])
RETURN m

Или:

MATCH (m:Movie)
WHERE NONE(n in ['Keanu Reeves', 'Robin Williams','Frank Langella'] WHERE (m)<-[:ACTED_IN]-(:Person {name:n}))
RETURN m

Но теперь я хотел бы получить фильмы, где снимался максимум один из трех. Для этого я искал функции предикатов, но не смог найти способ подсчета появлений.

Как я могу получить фильмы, в которых процент заданных актеров не сыграл?

1 Ответ

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

Вы можете объединить NONE с SINGLE

MATCH (m:Movie)
WHERE NONE(n in ['Keanu Reeves', 'Robin Williams','Frank Langella'] WHERE (m)<-[:ACTED_IN]-(:Person {name:n}))
OR SINGLE(n in ['Keanu Reeves', 'Robin Williams','Frank Langella'] WHERE (m)<-[:ACTED_IN]-(:Person {name:n}))
RETURN m

Или вы можете посчитать внешний вид рисунка

MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:ACTED_IN]-(p:Person))
WHERE p.name in ['Keanu Reeves', 'Robin Williams','Frank Langella']
WITH m, COUNT(p) as count
WHERE count < 2
RETURN m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...