2017-05-23 4 views
1

現在、私は2つのラベルタイプを持っています。私は組織が変わるときにこの関係を更新しようとしています。私は私を満足させない解決策を思いついた。最初に、前のノードとの現在の関係を削除してから、新しい組織と再び関係を作成します。これは論理的にはRDBMSで機能しますが、グラフデータベースはもっと簡単になります。のNeo4j:</p> <ul> <li>ユーザー</li> <li>組織</li> </ul> <p>ユーザーは、組織で働く:1回の関係を更新するための一つの

 MATCH (user:User) 
     WHERE id(user) = $id 
     SET user = $props 

     WITH user 
     OPTIONAL MATCH (user)-[ro:WORKS_IN]->(organization:Organization) 
     DELETE ro 

     WITH user 
     MATCH (organization:Organization {name: 'Ebay'}) 
     CREATE (user)-[:WORKS_IN]->(organization) 

     RETURN user , organization 

私はこの問題のより洗練された解決策を考え出す必要があります。

答えて

0

APOC proceduresをインストールし、グラフリファクタリング手順apoc.refactor.toを使用してエンドノードを変更することができます。ドキュメントは言う:

call apoc.refactor.to(rel, endNode):新しい エンド・ノードを使用して関係をリダイレクトします。

0

正直、ここではあまり控えめにすることができます。私が考えることのできる最大のものは、WORKS_IN関係パターンから変数を外してタイプすることです(ただし、すべてを削除することができる場合のみ:WORKS_IN関係をa:Userノードとみなし、それらがすべてであると仮定します: :

MATCH (user:User) 
    WHERE id(user) = $id 
    SET user = $props 

    WITH user 
    OPTIONAL MATCH (user)-[ro:WORKS_IN]->() 
    DELETE ro 

    WITH user 
    MATCH (organization:Organization {name: 'Ebay'}) 
    CREATE (user)-[:WORKS_IN]->(organization) 

    RETURN user , organization 
関連する問題

 関連する問題