2017-06-17 1 views
1

このpostによれば、リスト内のすべての関連するエンティティをマップしようとしました。 私は、ユーザーのリストを返すために、条件付きポストに同じクエリを使用しますが、重複したオブジェクト関連するすべてのエンティティをマップしようとすると、リスト内の重複するオブジェクト

MATCH (user:User) WHERE <complex conditions> WITH user, calculatedValue MATCH p=(user)-[r*0..1]-() RETURN user, calculatedValue, nodes(p), rels(p)

が、それはバグです返しますか?私はSDNを使用しています。4.2.4.RELEASE with neo4j 3.2.1

+0

解決策を見つけましたか? –

+0

私は提案したようにOPTIONAL句を使用します – aGO

+0

Ok、エンティティは次に水和しますか?それは私のために働かなかった。 –

答えて

2

バグではありません。

Neo4jのMATCHは、指定されたパターンのすべての一致を検出します。さんがあなたの最後のマッチを見てみましょう:

MATCH p=(user)-[r*0..1]-() 

あなたが*0..1の可変の試合を持っているので、これは常に、その後(rels(p)空とだけuserを含むnodes(p)で)だけuser自体に少なくとも一つの行を返す、となります接続されているすべてのノード(常にuserがその行に存在し、nodes(p)コレクションに他の接続ノードとともに表示されます)が表示されます。

最後にuserノードとnノードが直接接続されている場合は、n + 1個の行が得られます。 Neo4jブラウザでクエリを実行し、テーブルの結果を確認して確認することができます。私たちはすべての関係と接続されたノード(というよりも、各パスのためだけの関係およびノー​​ド)に集約しているので

... 
OPTIONAL MATCH (user)-[r]-(b) 
RETURN user, calculatedValue, collect(r) as rels, collect(b) as connectedNodes 

は、あなたがあたりの単一行の結果を得るでしょう:

より良い試合のようなものがあるかもしれませんuserノード。

+0

あなたの解決策は正しい数のオブジェクトを返しますが、水和されていません(ユーザーの関連エンティティはすべてマップされません) – aGO

関連する問題