需要以下密码的帮助,
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
错误。
答案 0 :(得分:2)
如果这里只有一种关系类型,拉杰的方法是正确的。
但是,您说的是“或之后的关系可能会有所不同”,因此您要查找的是满足特定谓词的一种关系类型,还是查找具有不同谓词的另一种关系类型。
您可以在此处使用pattern comprehensions来收集模式匹配项,这将使您在理解范围内引入新的变量。
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
请注意,您的关系类型(甚至您匹配的整个模式)在单独的模式理解上可能会有所不同。
答案 1 :(得分:1)
新变量(这里的r和w)在 WHERE 子句中是不允许的。
您只能检查变量是否在位置之前。
通过将关系检查从 WHERE 移至 MATCH 子句,您可以得到相同的结果,
MATCH (user) WHERE (ID(user) = 999)
MATCH (user)<-[rel1:`post`]-(p:`Post`)-[r:`review`]->(w:Review)
WHERE (r.score IN [4,5] AND w.category='FB') OR (r.score IN [6,8] AND w.category='INSTA')
RETURN DISTINCT(p)