使用变量在密码中创建关系?

Pet*_*y B 4 neo4j cypher

我正在尝试动态地创建节点之间的关系.我遇到的问题是我无法使用变量来指定关系类型.

例如,我有数据:

{
    nodes: [
        {
             "name":"Node1"
        },
        ...
    ],
    relationships: [
        {
             "sourceNode": "Node1",
             "destinationNode": "Node2",
             "relationshipType": "FRIEND"
        },
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

假设已创建所有节点.

我现在想要在类型的节点之间创建关系relationshipType.

我试着这样做:

WITH {json} AS document
UNWIND document.relationships AS relationship
MATCH (pdt:Node {name: relationship.sourceNode})
MATCH (cdt:Node {name: relationship.destinationNode})
CREATE (pdt)-[r:relationship.relationshipType]->(cdt)
RETURN pdt.name,type(r),cdt.name
Run Code Online (Sandbox Code Playgroud)

然而它很糟糕,[r:relationship.relationshipType]因为它期待一个明确的类型[r:CHILD].

是否可以使用变量来设置关系类型?

cyb*_*sam 8

安装APOC插件后,您可以使用该apoc.create.relationship过程创建与动态类型的关系.

例如:

WITH {json} AS document
UNWIND document.relationships AS relationship
MATCH (pdt:Node {name: relationship.sourceNode})
MATCH (cdt:Node {name: relationship.destinationNode})
CALL apoc.create.relationship(pdt, relationship.relationshipType, NULL, cdt) YIELD rel
RETURN pdt.name, type(rel), cdt.name
Run Code Online (Sandbox Code Playgroud)