2017-12-17 14 views
0

私はneo4j 3.2.xを使用しています。私がしようとしているのは、2つのノード(UserとGender)間のリレーションを更新し、relationshipsとしてInterestInGenderプロパティを持つ単一のUserノードを返すクエリを書くことです。今のところ、interestedInGenderの単一の値を持つ複数のレコードを返すように、以下のクエリに問題があります。関係は適切に作成されますが、データを返すときには複数のレコードが返されます。私はちょうどユーザーノードを返すしたい。単一のユーザーノードだけを返すようにこのクエリを修正できる方法はありますか?性別・ノード...両方の行が同じuノードを持つ2つの列が、異なるigノード:性別へのごig試合は2に一致するためneo4j内の異なるラベルに対して複数の一致がある単一ノードを返す方法は?

MATCH (u:User {_id:"1234"}) 
MATCH (ig:Gender) WHERE ig.value IN ["male", "female"] 
WITH u, ig 
OPTIONAL MATCH (u)-[igr:INTERESTED_IN_GENDER]->() 
DELETE igr 
with u, ig 
MERGE (u)-[:INTERESTED_IN_GENDER]->(ig) 
RETURN u{ 
    ._id, 
    interestedInGender: [(u)-[:INTERESTED_IN_GENDER]->(ig:Gender) | ig.value] 
} 

答えて

0

あなたが複数のレコード(行)を取得している理由があります。そのカーディナリティーは残りのクエリ全体に残っているので、2行戻ってくる。

あなたが関係をMERGE後に戻ってダウン1からuのカーディナリティを縮小するので、あなたのMERGE後が、あなたのRETURN前にこれを追加する必要があります。

WITH distinct u 
+0

私はこの 'MATCH(Uやってしまった:ユーザーを{_id: "1234"}) U OPTIONAL MATCH(U)WITH - [IGR:INTERESTED_IN_GENDER] - >() MATCH(G igenderあるUと IGR UNWIND [ "男性"、 "女性"] DELETE :性別(値:igender)) MERGE(u) - [:INTERESTED_IN_GENDER] - >(g) とu、RETURN u { ._id、 interestedInGender:[(u) - [:INTERESTED_IN_GENDER] - >(iig:ジェンダー)| iig.value] } ' – Yalamber

+0

私は別のuも試しましたが、それは単一の結果を返しましたが、interestedInGenderの値は単一の値でした。 – Yalamber

関連する問題