2017-07-05 8 views
1

私は:趣味の関係があります:ユーザーノード。Neo4jリストと違って重複値を除いたプロパティセットの作成方法

趣味の関係は{ hobbies:['football','hockey'] }

は、今私は、データストリームを反復処理していると私は一意(セットのように)このリストの中に趣味をマージしたいリストプロパティが含まれています。私はこのような合体使用してみました:

MERGE (from)-[rel:hobbies]->(to) 
set rel.hobbies= COALESCE(rel.hobbies, []) + 'football'; 

問題は今、私の財産は、私は重複を避けることができますどのように重複

{ hobbies:['football','hockey','football'] }

が含まれていることですか?

答えて

1

このCypherクエリは、APOC手順を必要とせずに動作するはずです。

MERGE (from)-[rel:hobbies]->(to) 
WITH rel, COALESCE(rel.hobbies, []) + 'football' AS hobbies 
UNWIND hobbies as r 
WITH rel, collect(distinct r) AS unique 
set rel.hobbies = unique 

このクエリを使用UNWIND

uniqueという変数に趣味のアレイと、それ collectユニークな趣味の後を展開します。 Neo4j ServerにAPOC手順がない場合は、このクエリを使用します。

+0

このようなUNWINDの使い方をご理解いただきありがとうございます。 –

+0

@AtulSomanあなたは大歓迎です! –

1

[UPDATED]

このクエリは、それがすでに(最初のチェックを行うことで)存在しない場合にのみ、hobbiesコレクションに「サッカー」を追加します。

MERGE (from)-[rel:hobbies]->(to) 
FOREACH(x in CASE WHEN NOT ('football' IN rel.hobbies) THEN [1] END | 
    SET rel.hobbies = COALESCE(rel.hobbies, []) + 'football') 

代わりに趣味をハードコーディング(たとえば、 'football')を追加する場合は、parameterを使用してください。

また、異なる趣味を表現するためにノードHobbyを使用するようにデータモデルを変更することを検討する必要があります。これはグラフ指向のアプローチです。

+0

ありがとう! FOREACHの使用にパフォーマンスに影響はありますか?また、各ノードの趣味を表現するためにデータモデルを変更するアプローチも洞察になりました。 –

+0

初めてリレーションを作成しているときに、これは機能しません。 –

+0

私は私の答えを訂正しました。 – cybersam

関連する問題