2017-12-22 17 views
0

私はエンティティノード、ユーザーノード、およびLIKES、POSTED_BYなどのいくつかの関係を持つデータベースを持っています。私は、この目的を達成するためのクエリを記述しようとしています:Cypher COLLECT句を使用すると、リストが空になることがあります。

は、私は私のクエリを簡素化しているユーザー

。なお、すべてのエンティティの特定のユーザーが好きなノードまたはPOSTED_BYされたものを探す - リアルに私が持っています上記と同様の他の条件の束。

私はすべてのEntityノードのリストを集約し、その行ごとにビルドするためにCOLLECT句を使用しようとしています。

MATCH (e)<-[:LIKES]-(me:User{id: 'rJVbpcqzf'}) 
WITH me, COLLECT(e) AS all_entities 
MATCH (e)-[:POSTED_BY]->(me) 
WITH me, all_entities + COLLECT(e) AS all_entities 
UNWIND all_entities AS e 
WITH DISTINCT e 
RETURN e; 

これは、ユーザが気に入った少なくとも一つのエンティティことがある場合のみ、正しいリストを返すているように見える(すなわち、第一は、COLLECT非空のリストを返す場合)。しかし、好きなエンティティがない場合、クエリ全体が空に戻ります。

私がここで紛失していることに関する提案はありますか?

答えて

1

使用OPTIONAL MATCH

MATCH (me:User {id: 'rJVbpcqzf'}) 
OPTIONAL MATCH (me)-[:LIKES|POSTED_BY]->(e) 
RETURN collect(DISTINCT e) AS all_entities 

注:

  1. 代わりの収集や巻き戻し、あなたは単にDISTINCTを使用することができます。 DISTINCT with collectも使用できます。

  2. multiple relationship types、つまりLIKES|POSTED_BYをリレーションシップタイプに使用することもできます。

関連する問題