我创建了两个具有连接关系的标签A和B。我需要创建每个标签A和B以及它们之间的关系的多个节点。即,对于每个节点A和B,我需要创建一个关系。 例如:a1:A-[:CONNECT]-> b1:B,a2:A-[:CONNECT]-> b2:B,a3:A-[:CONNECT]-> b3:B,... an:A -[:CONNECT]-> bn:B
有没有一种自动创建关系的方法?当我创建节点时,数据库可以自动在两个节点之间创建关系吗? 现有标签的节点?请帮忙。
我使用APOC过程在一个属性上手动创建节点之间的多个关系-对于标签LABEL1和LABEL2的100个节点,在属性值上,我可以使用以下proc使用单个Cypher查询手动创建关系:>
MATCH (ref1:LABEL1), (ref2:LABEL2)
WHERE ref1.property = ref2.property
CALL apoc.create.relationship(ref1, ‘RELATIONSHIP_NAME', {}, ref2) YIELD rel
RETURN rel
但是我想知道是否存在一种方式,两个标签A和B之间的关系已经存在;每当创建标签A和B的新节点时,关系都会自动创建而无需运行密码查询。
答案 0 :(得分:0)
如果要在同时创建的2个节点之间创建关系,只需在CREATE
子句中指定该模式。
以下是使用LOAD CSV
导入数据的示例:
LOAD CSV WITH HEADERS FROM 'file:///data.csv' AS row
CREATE (a:A {x: row.x})-[:CONNECT]->(b:B {y: row.y})
通常,数据库会代表您自动创建关系会很冒险,因为这可能会导致创建您不想要的关系。
[更新]
但是,如果在Label2
个节点之后创建Label1
个节点,并且确定要自动创建CONNECT
关系,则可以使用APOC创建一个trigger像这样:
CALL apoc.trigger.add(
"create-CONNECT-rel",
"UNWIND $createdNodes AS ref2
WITH ref2
WHERE ref2:Label2
MATCH (ref1:Label1 {property: ref2.property})
CREATE (ref1)-[:CONNECT]->(ref2)",
{phase:'before'})