如何从指定formula节点出发查询多关系关联的目标节点?
解决方案
你需要调整查询路径,覆盖f1通过pNode关联到f2的路径,同时保留原有的f1直接/间接关联f4、f5的路径,并且过滤掉带simulation_id属性的边。以下是可行的查询语句:
MATCH (node1:formula {model_id: 1}) // 获取f1直接/间接通过influences关联的节点 OPTIONAL MATCH (node1)-[:influences* (r, n | r.simulation_id IS NULL)]->(n:formula) // 获取通过pNode关联的f2节点 OPTIONAL MATCH (node1)<-[:has]-(p:product_sku)-[:influences {simulation_id: NULL}]->(m:formula) // 合并结果并去重 RETURN DISTINCT COALESCE(n, m) AS target_node WHERE target_node IS NOT NULL
原查询问题分析
原查询仅匹配了formula节点之间的influences路径,但f2是通过product_sku节点中转的,路径为f1 <-[:has]- pNode -[:influences]-> f2,不在原查询的路径范围内,所以无法被获取到。
新查询说明
- 第一部分
OPTIONAL MATCH保留你原有的逻辑,获取f4、f5节点; - 第二部分
OPTIONAL MATCH通过反向的has边找到关联的pNode,再通过无simulation_id的influences边获取f2节点; - 最后用
COALESCE合并两种路径的结果,DISTINCT去重,WHERE过滤掉空值,得到所有目标节点。
内容的提问来源于stack exchange,提问作者ephraim lambarte
相关产品推荐
相关产品推荐

