Cypher查询:获取指定医生关联的所有患者及其对应诊断的嵌套结果
不需要两次独立查询,使用Cypher内置的collect()聚合函数即可实现你需要的嵌套分组结构。
优化后的查询语句
MATCH (d:Doctor)<-[:PATIENT_AT]-(p:Patient)-[:HAS_DIAGNOSIS]->(di:Diagnosis)-[:DIAGNOSIS_BY]->(d) WHERE d.id = 1000000 RETURN p AS 患者, collect(di) AS 名下所有诊断
逻辑说明
- 匹配路径直接关联了「目标医生-对应患者-患者的诊断-诊断属于目标医生」的完整关系链,避免匹配到其他医生给该患者出具的诊断记录,比你原有的多段MATCH写法更简洁严谨
- 返回时Cypher会自动将非聚合字段
p(患者)作为分组维度,把同一患者对应的所有诊断节点聚合为列表,返回结果天然就是「每一行对应一名患者,附带其所有诊断列表」的嵌套结构 - 如果不需要返回完整的节点属性,也可以自定义返回字段,示例如下:
MATCH (d:Doctor)<-[:PATIENT_AT]-(p:Patient)-[:HAS_DIAGNOSIS]->(di:Diagnosis)-[:DIAGNOSIS_BY]->(d) WHERE d.id = 1000000 RETURN p.name AS 患者姓名, p.id AS 患者ID, collect({诊断ID: di.id, 诊断时间: di.create_time, 诊断结果: di.result}) AS 诊断列表
内容的提问来源于stack exchange,提问作者NoahH
相关产品推荐
相关产品推荐

