neo4j - 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
错误。
解决方案
如果这里只有一种关系类型,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
请注意,您的关系类型(甚至您匹配的整个模式)在单独的模式理解中可能会有所不同。
推荐阅读
- python - Numba 比普通 python 慢得多,来自 Pandas 文档
- r - R数据框:按组聚合并转换为频率计数
- flutter - 使用过多的流生成器是否有效?
- java - SHA-3 可变长度哈希与使用 BouncyCastle 在 Java 中截断普通哈希相同
- angular - 在已经有一个 Wordpress 站点的 Debian 上设置一个 Angular 应用程序
- python - 检测变化是列值和绘图
- database - 允许用户在 Realm Sync 中读取多个分区
- reactjs - 配置了 webpack 的 AntD 反应
- mysql - SQL Query 查找符合条件的元素
- c - c中的字符串连接问题