借鉴一些见解 这个答案 我想出了一个似乎有用的kludge。
MATCH path = (n1:Ward)<-[r1:PARTOF]-(n2:Unknown)<-[r2:PARTOF]-(n3:Chome) WHERE n2.name = n3.name WITH n2, size((n2)<-[:PARTOF]-()) as degree WHERE degree = 1 MATCH (n1:Ward)<-[r1:PARTOF]-(n2:Unknown)<-[r2:PARTOF]-(n3:Chome) RETURN n1,n2,n3
我希望并非所有部分都是必需的,而且它不是一个有效的解决方案,但我还不知道还有什么能够改进它。
例如,我将第一行定义为 path ,但我不能用 MATCH path 在倒数第二行,我不知道为什么。
path
MATCH path
另外,如果我写 WITH size((n2)<-[:PARTOF]-()) as degree (放弃了 n2, 在WITH之后,它不仅返回 n2 学位&gt; 1,但也连接到它们的所有节点(甚至超过 n3 节点)。我不知道为什么它的行为像这样,并且WITH的Neo4j文档没有示例或描述来帮助我理解为什么 n2 在这里是必要的。对我的Cypher查询或解释的任何改进 怎么样 要么 为什么 它的作品将非常感激。
WITH size((n2)<-[:PARTOF]-()) as degree
n2,
n2
n3
你需要传递 path 在你的 WITH 声明。
WITH
MATCH path = (n1:Ward)<-[r1:PARTOF]-(n2:Unknown)<-[r2:PARTOF]-(n3:Chome) WHERE n2.name = n3.name WITH path, size((n2)<-[:PARTOF]-()) as degree WHERE degree = 1 RETURN path
或者像这样短:
MATCH path = (n1:Ward)<-[r1:PARTOF]-(n2:Unknown)<-[r2:PARTOF]-(n3:Chome) WHERE n2.name = n3.name AND size((n2)<-[:PARTOF]-()) = 1 RETURN path