2016-10-24 8 views
1

私はノード間の関係を動的に作成しようとしています。私が抱えている問題は、変数を使用して関係タイプを指定することができないということです。変数を使用してcypherでリレーションシップを作成しますか?

例えば、私はデータを持っている:

{ 
    nodes: [ 
     { 
      "name":"Node1" 
     }, 
     ... 
    ], 
    relationships: [ 
     { 
      "sourceNode": "Node1", 
      "destinationNode": "Node2", 
      "relationshipType": "FRIEND" 
     }, 
     ... 
    ] 
} 

は、すべてのノードが作成されていると仮定します。

ノードrelationshipTypeの間にリレーションシップを作成する必要があります。

私はそうのようにこれをやろうとしている:それは[r:CHILD]のような明示的な型を期待しているので、それは[r:relationship.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 

変数を使用してリレーションシップタイプを設定することはできますか?

+0

関連する投稿はhttp://stackoverflow.com/questions/26536573/neo4j-how-to-set-label-with-property-valueである:例えば

「現在のところはありません変数「 –

+0

」を持つラベルを定義する可能性[パラメータ化されたneo4j cypherクエリの実行]の可能な複製(http://stackoverflow.com/questions/40205200/running-parametrized-neo4j-cypher-query) –

答えて

4

APOC pluginをインストールした後で、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 
関連する問題