首页 > 解决方案 > Cypher:由 OR 连接的路径节点属性上的多个路径和条件

问题描述

需要以下密码方面的帮助,

MATCH (user)
WHERE (ID(user) = 999)
MATCH (user)<-[rel1:`post`]-(p:`Post`)
WHERE ((p)-[r:`review`]->(w:Review) AND r.score IN [4,5] AND w.category='FB') OR
((p)-[r:`review`]->(w:Review) AND r.score IN [6,8] AND w.category='INSTA')
RETURN DISTINCT(p)

这给出了undefined variable r错误。

标签: neo4jcypher

解决方案


如果这里只有一种关系类型,Raj 的方法是正确的。

但是,您说“OR 之后的关系可能不同”,因此您正在寻找满足某个谓词的一种关系类型或具有不同谓词的不同类型。

您可以在此处使用模式推导来收集模式匹配的片段,这将让您在推导范围内引入新变量。

MATCH (user)
WHERE ID(user) = 999
MATCH (user)<-[:`post`]-(p:`Post`)
WITH user, p, [(p)-[r:`review`]->(w:Review) WHERE r.score IN [4,5] AND w.category='FB' | w] as midFB_Review, [(p)-[r:`review`]->(w:Review) WHERE r.score IN [6,8] AND w.category='INSTA' | w] as highINSTA_Review
WITH user, p
WHERE size(midFB_Review) + size(highINSTA_Review) > 0
RETURN p

请注意,您的关系类型(甚至您匹配的整个模式)在单独的模式理解中可能会有所不同。


推荐阅读