如何为每个节点属性 的每个元素创建节点?
How do you do a for each to create nodes for each element of a node property?
我有代表 作者 属性 的算法的节点。我想为算法作者中的人创建节点,并在这些人和算法之间创建 WORKED_ON 关系。所以我尝试了:
FOREACH (p:author IN al:Algorithm | CREATE (p:PERSON).
(p)-[:WORKED_ON]->(al:Algorithm))
但是 returns:
Invalid input ':': expected "IN" (line 2, column 11 (offset: 156)).
"FOREACH (p:author IN al:Algorithm | CREATE (p:PERSON)"
假设作者 属性 包含一个用逗号分隔的姓名列表,您可以这样做
MATCH (a:Algorithm)
FOREACH( authorName IN SPLIT(a.author,',') |
MERGE (p:Person {name:authorName})
MERGE (p)-[:WORKED_ON]->(a)
)
注意:要使 MERGE
快速运行,您应该设置
CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
FOREACH
适用于集合,因此您必须先收集 Algorithm
节点。像,
MATCH (n:Algorithm) with collect(n) as algos
FOREACH(a in algos | CREATE (p:Person {name: a.author})-[:WORKED_ON]->(a))
但是,创建这些 Person 节点可能有更简单的方法,
MATCH (a:Algorithm)
CREATE (a)<-[:WORKED_ON]-(:Person {name: a.author})
我有代表 作者 属性 的算法的节点。我想为算法作者中的人创建节点,并在这些人和算法之间创建 WORKED_ON 关系。所以我尝试了:
FOREACH (p:author IN al:Algorithm | CREATE (p:PERSON).
(p)-[:WORKED_ON]->(al:Algorithm))
但是 returns:
Invalid input ':': expected "IN" (line 2, column 11 (offset: 156)).
"FOREACH (p:author IN al:Algorithm | CREATE (p:PERSON)"
假设作者 属性 包含一个用逗号分隔的姓名列表,您可以这样做
MATCH (a:Algorithm)
FOREACH( authorName IN SPLIT(a.author,',') |
MERGE (p:Person {name:authorName})
MERGE (p)-[:WORKED_ON]->(a)
)
注意:要使 MERGE
快速运行,您应该设置
CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
FOREACH
适用于集合,因此您必须先收集 Algorithm
节点。像,
MATCH (n:Algorithm) with collect(n) as algos
FOREACH(a in algos | CREATE (p:Person {name: a.author})-[:WORKED_ON]->(a))
但是,创建这些 Person 节点可能有更简单的方法,
MATCH (a:Algorithm)
CREATE (a)<-[:WORKED_ON]-(:Person {name: a.author})