12

特定のグラフノードにリンクされている要素の一意のセットを取得しようとしています。いくつかのノードがNeo4jグラフデータベースにロードされており、それらは「TO」関係を使用して接続されています(たとえば、ノード6は「TO」ノード7に接続します)。以下を使用して、開始ノードと「TO」関係によってリンクされている他のノードとの間のすべてのパスを取得できました。

    start a = node(6)
    match p = (a)-[r:TO*..]->(b)
    return distinct EXTRACT(n in nodes(p): n);

これにより、異なる出力パスが得られますが、ノード値が重複しています。例:

    +-------------------------------------------------------+
    | p                                                     |
    +-------------------------------------------------------+
    | [Node[6]{},:TO[5] {},Node[7]{}]                       |
    | [Node[6]{},:TO[5] {},Node[7]{},:TO[9] {},Node[11]{}]  | 
    etc...

これらのパスを組み合わせて、一意のパス値を含む単一のリストにするにはどうすればよいですか? COLLECTを使用してみましたが、上記の結果のネストされたバージョンになります。

    start a = node(6) 
    match p = (a)-[r:TO*..]->(b) 
    return collect(distinct p);

    [[Node[6]{},:TO[5] {},Node[7]{}],[Node[6]{},:TO[5] {},Node[7]{},:TO[9] {}, ... ]    
4

1 に答える 1

23

私はあなたが望む結果について正確に混乱しています(これが正しくない場合の例を挙げていただけますか?)。パスが必要ですか、それともノードが必要ですか?ノードが必要な場合は、次のようにします。

start a = node(6)
match (a)-[:TO*]->(b)
return collect(distinct b);
于 2013-01-15T20:56:26.190 に答える