Neo4j Cypher使用FOREACH遍历节点属性创建节点及关系报错如何解决
错误原因
- FOREACH 语法规则不允许在循环变量上直接加标签前缀,你写的
p:author、al:Algorithm属于语法误用,触发了冒号字符识别异常,才会返回「期望匹配IN关键字却遇到冒号」的报错 - 逻辑层面没有先匹配已存在的算法节点,也没有正确遍历单个算法节点的author属性列表,把节点标签、属性、变量的用法混淆了
- 原代码中CREATE语句中间多了非法的句号,语法不闭合
修复后代码
如果需要避免重复创建同名作者节点、重复创建关系,推荐使用MERGE逻辑:
// 匹配所有已有的算法节点 MATCH (al:Algorithm) // 遍历每个算法节点的author属性列表 FOREACH (p_name IN al.author | // 存在就复用,不存在才创建PERSON节点 MERGE (p:PERSON {name: p_name}) // 存在就复用,不存在才创建WORKED_ON关系 MERGE (p)-[:WORKED_ON]->(al) )
如果明确需要强制新增节点和关系,把代码里的MERGE换成CREATE即可。
内容的提问来源于stack exchange,提问作者Revolucion for Monica
相关产品推荐
相关产品推荐

