2016-12-20 6 views
0

ここでは私のCYPHERクエリです:オプションのマッチのNeo4j

MATCH (a : User), (user : User {username : 'lebron'}) 
WHERE a.phoneNumber IN ['757488374748','+9035115','+90390320303'] 
    AND a.username <> 'lebron' 
OPTIONAL MATCH (user)-[f:FOLLOWS]->(a), (a)-[p : POSTS]->(b) 
RETURN DISTINCT COLLECT(b.postId) AS postId, a.username AS membername, 
    f.followRequestStatus AS followRequestStatus, user.private AS userPrivate; 

「」ノードがユーザノードである、「」写真をポストすることができ、かなり多くのInstagramのように、他のユーザーの写真のように、他のユーザーに従ってください。ここで起こっているのは、ノードaとノードbとの間のリレーション - [p:POSTS]が存在する場合のみ、followRequestStatus(f.followRequestStatus)が正しくなることです。関係 'p'が存在しない場合、関係fが存在する場合でも、関係> 'f'に対してもnullを返します。

+0

あなたの実際の質問は私にはあまり明確ではありません。 followRequestStatusの正しい出力を実装する方法を尋ねていますか?そして、 'b'は新しく導入された変数(' a'からの投稿)なので、これは 'a'が何かを投稿した場合にのみfollowRequestStatusを出力していることを修正しました(postIdsのコレクションでは検出できませんでした空である)? – InverseFalcon

+0

followRequestStatusは、aが何かを投稿したかどうかにかかわらず、null、0または1でも構いませんが、(a) - [p:POSTS] - >(b)たとえ何らかの値があっても、followRequestStatusはnullとして出力されます。 –

+0

さて、それを得ました。私はあなたの説明を問題ではなく誤解していました。 – InverseFalcon

答えて

2

は、2個の別々のオプション一致するにあなたの2つのオプションMATCHパターンを分離しようとしたことがありますか?開発者ドキュメントからOPTIONAL MATCH説明において

... 
OPTIONAL MATCH (user)-[f:FOLLOWS]->(a) 
OPTIONAL MATCH (a)-[p : POSTS]->(b) 
... 

:[MATCHに比べ]

差が一致するものが見つからない場合、 OPTIONAL MATCHはの欠落部分にヌルを使用することですパターン。

コンマで区切られた2つの別々のパターンを使用する場合、両方の一致が見つからない場合、パターンのすべての部分にnullが使用されることが前提です。あなたは以下のことを望んでいるからです:aからのPOSTSがなくても関係を守るためには、別々の選択的マッチが必要です。

関連する問題