如何编写Neo4j Cypher查询返回仅同时关联种族和年龄两类分组的人员节点
Cypher查询实现方案
方案1:模式匹配写法(直观易读)
MATCH (p:Person)-[:BELONGS_TO]->(:Ethnicity), (p)-[:BELONGS_TO]->(:Age) RETURN DISTINCT p.name AS person_name
- 说明:同时匹配Person指向两类分组的关联关系,加
DISTINCT避免单个Person属于多个同类型分组时返回重复结果。
方案2:存在性判断写法(性能更优,推荐)
MATCH (p:Person) WHERE exists((p)-[:BELONGS_TO]->(:Ethnicity)) AND exists((p)-[:BELONGS_TO]->(:Age)) RETURN p.name AS person_name
- 说明:直接对所有Person节点做存在性校验,无需处理多匹配带来的笛卡尔积问题,数据量较大时查询效率远高于方案1。
- 注意:如果你的图谱中Person和分组的关联关系类型不是
BELONGS_TO,请替换为实际使用的关系类型即可。
内容的提问来源于stack exchange,提问作者sprint_6
相关产品推荐
相关产品推荐

