web-dev-qa-db-ja.com

サイファーパスクエリで一意のノードを返す

特定のグラフノードにリンクされている要素の一意のセットを取得しようとしています。 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] {}, ... ]    
12
Castrona

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

start a = node(6)
match (a)-[:TO*]->(b)
return collect(distinct b);
21
Eve Freeman