Neo4j中使用Cypher匹配节点并创建关联关系的查询问题
问题原因
Neo4j的属性名称大小写敏感,你创建三个节点时的属性名拼写不一致:
- 第一个节点属性为全小写
cst_id - 后两个节点属性为
csT_id(字母T大写)
你查询时统一用cst_id匹配,自然找不到ID为CST_ID_2的节点,导致AND条件无返回结果;改为OR后只要匹配到任意一个符合条件的节点组合就会返回,因此会带出所有3个节点。
排查步骤
执行以下语句查看所有CST节点的属性列表,即可验证属性名不一致的问题:
MATCH (n:CST) RETURN n.cst_id, n.csT_id, keys(n)
需求实现方案
推荐方案:先统一属性名(避免后续重复踩坑)
先执行以下语句把所有节点的属性名统一为全小写cst_id:
MATCH (n:CST) WHERE exists(n.csT_id) SET n.cst_id = n.csT_id REMOVE n.csT_id
1. 匹配返回前两个节点
统一属性后你的原有查询即可正常返回结果:
MATCH (c:CST),(d:CST) WHERE c.cst_id='CST_ID_1' AND d.cst_id='CST_ID_2' RETURN c,d
2. 为两个节点添加关系
示例添加类型为RELATED的关系,可按需调整关系类型和属性:
MATCH (c:CST {cst_id:'CST_ID_1'}), (d:CST {cst_id:'CST_ID_2'}) CREATE (c)-[:RELATED]->(d) RETURN c,d
临时方案:不修改现有属性直接查询
如果不想调整现有数据,查询时分别对应不同的属性名即可:
1. 匹配返回前两个节点
MATCH (c:CST {cst_id:'CST_ID_1'}), (d:CST {csT_id:'CST_ID_2'}) RETURN c,d
2. 添加关系
MATCH (c:CST {cst_id:'CST_ID_1'}), (d:CST {csT_id:'CST_ID_2'}) CREATE (c)-[:RELATED]->(d) RETURN c,d
内容的提问来源于stack exchange,提问作者Dimitrios Panagopoulos
相关产品推荐
相关产品推荐

