如何在Cypher查询中正确使用APOC.when按rel_type选择对应节点
根据rel_type动态匹配节点的实现方案
一、直接返回匹配节点(理想方案)
通过apoc.when动态判断rel_type的值,选择对应的节点标签执行匹配,最终返回完整节点。核心是将判断条件替换为变量对比,确保参数正确传入子查询:
MATCH (legal:Legal_Entity {hid_party : '157456674'}) WITH legal, '422741957' AS second_hid, 'LEGAL' AS rel_type CALL apoc.when( rel_type = 'LEGAL', 'MATCH (second:Legal_Entity {hid_party : $second_hid}) RETURN second AS second_node', 'MATCH (second:Natural_Person {hid_party : $second_hid}) RETURN second AS second_node', {second_hid: second_hid} ) YIELD value RETURN value.second_node
当rel_type为'LEGAL'时,匹配Legal_Entity节点;为'PHYSICAL'时,匹配Natural_Person节点,返回的value.second_node就是目标节点。
二、返回匹配节点的ID(备选方案)
若无需完整节点,仅需节点唯一ID,只需修改子查询的返回内容为ID(second)即可:
MATCH (legal:Legal_Entity {hid_party : '157456674'}) WITH legal, '422741957' AS second_hid, 'LEGAL' AS rel_type CALL apoc.when( rel_type = 'LEGAL', 'MATCH (second:Legal_Entity {hid_party : $second_hid}) RETURN ID(second) AS node_id', 'MATCH (second:Natural_Person {hid_party : $second_hid}) RETURN ID(second) AS node_id', {second_hid: second_hid} ) YIELD value RETURN value.node_id
返回的value.node_id即为目标节点的ID,逻辑与返回节点完全一致,仅输出内容不同。
内容的提问来源于stack exchange,提问作者Kerpol
相关产品推荐
相关产品推荐

