2016-09-21 6 views
2

全体の結果が空になり、私はときの結果、私はbuilt.Hereは、しかし、私のクエリのNeo4jサイファークエリは、私は奇妙な問題に直面してきた

MATCH (u1:User {user_id: 4})-[:FOLLOWS]->(u2:User)-[]->(r1:Rest{city_id: 1}) 
WITH COLLECT ({ REST: r1.res_id}) as rows 
MATCH (u1:User {user_id: 4})-[rel]->(r2:Rest{city_id: 1}) 
WHERE NOT (u1:User {user_id: 4})-[rel : BEEN_THERE | ADD_REVIEW]->(r2:Rest{city_id: 1}) 
WITH rows + COLLECT ({ REST: r2.res_id}) AS allrows 
UNWIND allrows as row 
RETURN row.REST as RESTAURANT_ID, count(row.REST) as COUNT 
ORDER BY COUNT desc 
LIMIT 15; 

でいることのNeo4jグラフからデータを取得しようとしていますCOLLECT({REST:r2.res_id})の値が空であり、結果全体が空になります。また、クエリは最初の一致から行を識別できず、未定義rowsを返します。私にお知らせください。ありがとう!

答えて

2

パターンがどのパスとも一致しない場合、結果は実際には空になります。

あなたが2でMATCHを分割し、二番目のOPTIONALを行う必要があり、実際の場合や、何度も何度も同じu1ノードをマッチング停止:

MATCH (u1:User {user_id: 4}) 
OPTIONAL MATCH (u1)-[:FOLLOWS]->(:User)-->(r1:Rest {city_id: 1}) 
WITH u1, collect({ REST: r1.res_id }) AS rows 
OPTIONAL MATCH (u1)-->(r2:Rest {city_id: 1}) 
WHERE NOT (u1)-[:BEEN_THERE | ADD_REVIEW]->(r2) 
WITH rows + collect({ REST: r2.res_id }) AS allrows 
UNWIND allrows as row 
RETURN row.REST AS RESTAURANT_ID, count(row.REST) AS COUNT 
ORDER BY COUNT desc 
LIMIT 15 

私はわからないんだけど最初のOPTIONAL MATCHの場合(2番目のcollectはブロッカーとしか言えませんが)、両方のパターンを集約したい場合は、ここに移動してください。

+0

お返事ありがとうございました!それは正しく動作しています。 –

+0

@AditKaushal答えを躊躇しないでください(https://stackoverflow.com/help/someone-answers)。 –

関連する問題