2017-04-07 8 views
0

私はMERGEクエリを持っています。存在する場合はノードをマージするか、新しいノードを作成したいのですが、新しいノードが作成されたら、新しく作成されたノードへの基本的な関係リンクノード新しい関係を追加する方法neo4jのCREATE SETクエリ

にこのような何かのプロパティを追加します。私は、これはエラーを示し、新しい関係を作成する方法を見つけ出すカントしかし

MERGE (user:USER { userId : userId }) 
ON CREATE SET 
    user.password = password , 
    user.userID = userID , 
    (user)-[:INFO]->(userInfo:PROFILEINFO {firstname:'John',lastName:'Doe'}) 
RETURN user 

を。

ユーザーが新しい情報を入力したり、関係を更新したり、ユーザーが存在しない場合に新しいユーザーを作成したり、関係を作成したりする場合は、userInfoを更新する必要があります。

+1

関係を更新するために、usreが新鮮に作成された場合は、作成するのと同じ関係ありますか?もしそうなら、関係の合併はまったく同様に働かないだろうか?また、別のノードに姓と名義を保持する特別な理由はありますか?USER? – InverseFalcon

+0

@InverseFalconええ、私はマージの関係を作成すると、望みの効果が得られると思います。私はあなたにお返しします。 また、私はこれを分割しました。私は、PROFILEINFO、:PRIVACYINFO、:SECURITYINFOのような同じ関係を持つユーザーごとに異なる情報ノードを指定するので、私は分けました。ユーザーの情報:INFOだから、単一のノード これは不要なノードを作成すると思います。 –

+0

@InverseFalcon私はどのような構造に従うべきですか?異なるノードの情報を分割するか、そのユーザーのすべての情報を保持する大きなプロパティオブジェクトを作成しますか? –

答えて

3

あなたは一時的な財産とするforeachを使用することができます。

MERGE (user:USER { userId : userId }) 
ON CREATE SET 
    user.password = password , 
    user.userID = userID , 
    user.isCreated = [true] 
FOREACH(ifthen in user.isCreated | 
    MERGE (user)-[:INFO]->(userInfo:PROFILEINFO {firstname:'John',lastName:'Doe'}) 
    REMOVE user.isCreated 
) 
RETURN user 
+0

'ifthen in user.isCreated'はこの' ifthen'を理解できませんでしたか? –

+0

@raviyadavこれはcypherの条件文トリックです - http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/ –

関連する問題