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;