Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4J:条款未按预期工作_Neo4j_Cypher - Fatal编程技术网

Neo4J:条款未按预期工作

Neo4J:条款未按预期工作,neo4j,cypher,Neo4j,Cypher,使用Neo4J moovie graph,执行此查询时: match (p:Person)-[ai:ACTED_IN]->(m:Movie) where not (p.name in ['Keanu Reeves']) return m limit 1 我正在拍基努·里夫斯出演的电影,比如《黑客帝国革命》。 我假设查询应该返回基努·里维斯没有出演的电影。 我做错了什么?获得基努没有出演的电影的正确方法是什么?如果你想获得基努·里夫斯没有出演的所有电影,你必须从结果中排除这种关系,否则你将

使用Neo4J moovie graph,执行此查询时:

match (p:Person)-[ai:ACTED_IN]->(m:Movie)
where not (p.name in ['Keanu Reeves'])
return m limit 1
我正在拍基努·里夫斯出演的电影,比如《黑客帝国革命》。 我假设查询应该返回基努·里维斯没有出演的电影。
我做错了什么?获得基努没有出演的电影的正确方法是什么?

如果你想获得基努·里夫斯没有出演的所有电影,你必须从结果中排除这种关系,否则你将获得基努·里夫斯和任何其他演员也出演的电影

获取基努·里维斯没有出演过的所有电影:

MATCH (p:Person),(m:Movie)
WHERE p.name IN ['Keanu Reeves']
AND NOT ((p)-[:ACTED_IN]->(m))
RETURN m
这是可行的,但它正在
(p:Person)
(m:Movie)
节点之间建立一个连接

下面的查询也会做同样的工作,但会避免使用笛卡尔积(我认为这是一种更清晰的方式):

或:

匹配(m:电影)
其中无(n在['Keanu Reeves','Robin Williams']

其中(m)多人在一部电影中表演(…通常),而你在电影中的演员数量超过了。你想在电影中数一数,筛选那些没有基努·里夫斯的演员。此外,['Keanu-Reeves']
中的
p.name是过火了。只需使用
p.name='Keanu-Reeves'
,或者,为了更清楚起见,
匹配(p:Person{name:'Keanu Reeves'},(m:Movie)
如果不仅仅是Keanu Reeves,而是Keanu Reeves和Robin Williams呢?@Dexter您需要首先匹配这些节点,比如:
MATCH(p:Person)WHERE p.name在['Keanu Reeves',Robin Williams']中匹配(m:Movie)WHERE not(m)@德克斯特,我还在
m
之前添加了一个
DISTINCT
,以避免重复的结果。@Dexter哦,对了!我现在明白了。试试看:
MATCH(m:Movie)@Dexter或者这个(避免
WITH
):
MATCH(m:Movie)WHERE没有(n在['Keanu Reeves',Robin Williams']WHERE(m)中)
MATCH (m:Movie)
WHERE NOT (m)<-[:ACTED_IN]-(:Person {name : 'Keanu Reeves'})
RETURN m
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'])
RETURN m
MATCH (m:Movie)
WHERE NONE(n in ['Keanu Reeves', 'Robin Williams']
    WHERE (m)<-[:ACTED_IN]-(:Person {name:n}))
RETURN m