Cypher 中的可选匹配和 WHERE
OPTIONAL MATCH and WHERE in Cypher
我正在努力编写密码查询。
图表
下图为完整图。有些电影没有特技演员(图表是虚构的)。
问题
我想要所有从未与替身演员一起出演过电影的演员(和他们的电影)。在这种情况下,它将是 "Johnny Depp"
我想这会让你前进
// Find the actors and their movies
MATCH (a:Actor)--(m:Movie)
// where the actor was never in a movie with a stuntman
WHERE NOT (a)-[:ACTS_IN]-(:Movie)-[:ACTS_IN]-(:Stuntman)
RETURN a,m
这应该有效:
MATCH (n:Actor)-->(m:Movie)
WHERE NOT (n)-->()<--(:Stuntman)
RETURN n AS actor, collect(m) AS movies
干杯
PS:还有其他解决方案,但我认为性能较差:
MATCH (n:Actor)-->(m:Movie)
WITH n AS actor, collect(m) AS movies
WHERE all(m IN movies WHERE not (m)<--(:Stuntman))
RETURN actor, movies
我正在努力编写密码查询。
图表
下图为完整图。有些电影没有特技演员(图表是虚构的)。
问题
我想要所有从未与替身演员一起出演过电影的演员(和他们的电影)。在这种情况下,它将是 "Johnny Depp"
我想这会让你前进
// Find the actors and their movies
MATCH (a:Actor)--(m:Movie)
// where the actor was never in a movie with a stuntman
WHERE NOT (a)-[:ACTS_IN]-(:Movie)-[:ACTS_IN]-(:Stuntman)
RETURN a,m
这应该有效:
MATCH (n:Actor)-->(m:Movie)
WHERE NOT (n)-->()<--(:Stuntman)
RETURN n AS actor, collect(m) AS movies
干杯
PS:还有其他解决方案,但我认为性能较差:
MATCH (n:Actor)-->(m:Movie)
WITH n AS actor, collect(m) AS movies
WHERE all(m IN movies WHERE not (m)<--(:Stuntman))
RETURN actor, movies