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 - Fatal编程技术网

Neo4j中的基本查询

Neo4j中的基本查询,neo4j,Neo4j,以下两个查询变量产生不同的结果第一个变量给出了所需的结果。我不知道为什么。它们在我看来是一样的。有人能帮忙吗 MATCH (gene:Person)-[:ACTED_IN]->(mov), (actr:Person)-[:ACTED_IN]->(mov), (robin:Person{name:"Robin Williams"}) WHERE NOT (robin)-[:ACTED_IN]->(mov) AND gene.name = "Gene Hackman" RETURN

以下两个查询变量产生不同的结果第一个变量给出了所需的结果。我不知道为什么。它们在我看来是一样的。有人能帮忙吗

MATCH (gene:Person)-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person{name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(mov)
AND gene.name = "Gene Hackman"
RETURN  gene, mov, actr;

MATCH (gene:Person)-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person)
WHERE gene.name = "Gene Hackman"
AND NOT (robin{name:"Robin Williams"})-[:ACTED_IN]->(mov)
RETURN  gene, mov, actr;
这:

这意味着罗宾没有在电影中表演,而吉恩的名字不是“吉恩·哈克曼”

这:

这意味着吉恩的名字是“吉恩·哈克曼”,罗宾·威廉姆斯没有在电影中表演

看看发生了什么?基因黑客文件管理器是你的WHERE NOT功能的一部分。您需要使用第二个示例,或者像这样重写第一个示例:

MATCH (gene:Person { name: 'Gene Hackman' })-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person{name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(mov)
RETURN  gene, mov, actr;

我尽可能在整个查询中保持WHERE语法的一致性。如果我使用in-node语法过滤node或rel,我会尝试用同样的方法过滤其他节点。它保持事物的可预测性和可读性。

那么这是否意味着在不robin-[:ACTED_IN]->mov和gene.name=gene Hackman的位置等同于不robin-[:ACTED_IN]->mov和NOT gene.name=gene Hackman……注意在第二个条件中添加的NOT,在我们如何阅读和期望它的行为方面,是的。当你真的把它放到Cypher中时,第二个NOT似乎完全删除了WHERE NOT robin-[:ACTED_IN]->mov。
WHERE gene.name = "Gene Hackman"
AND NOT (robin{name:"Robin Williams"})-[:ACTED_IN]->(mov)
MATCH (gene:Person { name: 'Gene Hackman' })-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person{name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(mov)
RETURN  gene, mov, actr;