如何在 Neo4j 中循环创建关系
how to create relationships in loop in neo4j
我正在尝试为列表中的所有 ID 创建朋友关系,但出现错误:
Node already exists with label User and property "id"=[2]
Neo.ClientError.Schema.ConstraintViolation
基本上这些 id 已经存在,我只想使用 for-each.How 一次与多个 id 建立朋友关系,我可以做到这一点吗,或者有其他方法可以做到这一点吗?非常感谢任何帮助。
MATCH (u:User {id:"3"})
FOREACH (id in ["2","4","5"] |
MERGE (u)-[:FRIEND]->(:User {id:id}))
因为用户已经存在,所以有一个更简单的方法:
MATCH (u:User {id:"3"})
MATCH (friends:User) WHERE friends.id IN ["2","4","5"]
MERGE (u)-[:FRIEND]->(friends)
问题出在 MERGE 的使用上。如果您不希望在它们之间不存在模式的情况下重新创建任何一个节点,则 Merge 需要您绑定关系的两端。
u 已绑定,但由于 u 与其他用户之间没有 FRIEND 关系,因此整个模式都是从 u 创建的,具有 FRIEND 关系和一个新的 User 节点。
您无法在 FOREACH 中匹配用户,因此请改用
MATCH (u:User {id:"3"})
match (fb:User)
where fb.id in ["2","4","5"]
MERGE (u)-[:FRIEND]->(fb)
我正在尝试为列表中的所有 ID 创建朋友关系,但出现错误:
Node already exists with label User and property "id"=[2]
Neo.ClientError.Schema.ConstraintViolation
基本上这些 id 已经存在,我只想使用 for-each.How 一次与多个 id 建立朋友关系,我可以做到这一点吗,或者有其他方法可以做到这一点吗?非常感谢任何帮助。
MATCH (u:User {id:"3"})
FOREACH (id in ["2","4","5"] |
MERGE (u)-[:FRIEND]->(:User {id:id}))
因为用户已经存在,所以有一个更简单的方法:
MATCH (u:User {id:"3"})
MATCH (friends:User) WHERE friends.id IN ["2","4","5"]
MERGE (u)-[:FRIEND]->(friends)
问题出在 MERGE 的使用上。如果您不希望在它们之间不存在模式的情况下重新创建任何一个节点,则 Merge 需要您绑定关系的两端。 u 已绑定,但由于 u 与其他用户之间没有 FRIEND 关系,因此整个模式都是从 u 创建的,具有 FRIEND 关系和一个新的 User 节点。
您无法在 FOREACH 中匹配用户,因此请改用
MATCH (u:User {id:"3"})
match (fb:User)
where fb.id in ["2","4","5"]
MERGE (u)-[:FRIEND]->(fb)