如何编写Neo4j查询获取仅含入站BROADER_TERM边的Concept节点
Neo4j 查询:获取仅含入站 BROADER_TERM 边的最宽泛术语节点
要实现你的需求——找出仅存在入站BROADER_TERM边、没有任何出站BROADER_TERM边的Concept节点(也就是示例中的节点c),可以通过以下正确的Cypher查询实现:
MATCH (target:Concept)<-[:BROADER_TERM]-(:Concept) WHERE NOT EXISTS((target)-[:BROADER_TERM]->(:Concept)) RETURN DISTINCT target
关键说明:
MATCH (target:Concept)<-[:BROADER_TERM]-(:Concept):先匹配所有拥有至少一条入站BROADER_TERM边的Concept节点,绑定为target。WHERE NOT EXISTS((target)-[:BROADER_TERM]->(:Concept)):通过EXISTS()函数检查节点是否存在出站的BROADER_TERM边,用NOT排除这类节点。这里不需要引入新变量,直接检查关系模式即可。RETURN DISTINCT target:添加DISTINCT避免同一个节点因多条入站边被重复返回。
你之前的查询错误在于:在WHERE NOT子句中引入了未在MATCH里定义的变量c,Cypher不允许在过滤条件中使用未绑定的新变量,而使用EXISTS()函数可以完美规避这个问题。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

