基于Neo4j Cypher查询共享名称首字符的关联Person节点
查询关联且name首字符相同的:Person节点方案
嘿,我来帮你搞定这个Neo4j查询需求~你需要找出所有通过:CHILD_OF边和其他:Person节点关联,并且两者name属性首字符相同的节点,用Cypher可以轻松实现,下面是具体的解法:
核心查询语句
MATCH (p1:Person)-[:CHILD_OF]-(p2:Person) WHERE LEFT(p1.name, 1) = LEFT(p2.name, 1) RETURN DISTINCT p1
语句拆解说明
- MATCH子句:
(p1:Person)-[:CHILD_OF]-(p2:Person)匹配所有通过双向:CHILD_OF边连接的Person节点对,不管是p1是p2的孩子还是p2是p1的孩子;如果你只需要单向关系(比如仅p1是p2的孩子),可以改成(p1:Person)-[:CHILD_OF]->(p2:Person) - WHERE子句:
LEFT(p1.name, 1) = LEFT(p2.name, 1)用LEFT函数截取两个节点name属性的第一个字符,判断是否相同 - RETURN子句:
RETURN DISTINCT p1返回所有符合条件的节点,DISTINCT用来避免同一个节点因为关联多个符合条件的节点而重复出现在结果里
扩展:返回关联节点对
如果需要同时查看每个符合条件的节点及其关联的节点,可以调整返回语句:
MATCH (p1:Person)-[:CHILD_OF]-(p2:Person) WHERE LEFT(p1.name, 1) = LEFT(p2.name, 1) RETURN DISTINCT p1, p2
内容的提问来源于stack exchange,提问作者Andreas Kuczera
相关产品推荐
相关产品推荐

