2017-06-28 22 views
1

私はCypherのクエリを通して次のような関係を持っています。私はSegment1で始まり、それに応じて関係を取得しています。Cypherで一番上のノードを取得

(Segment1)-[:Leaf]->(Op1)-[:Account]->(Ac2)-[:Parent]->(Acc1)-[:Parent]->(Acc) 

私は[:Parent]関係の階層の最上位ノードを取得したいです。それを得る方法はありますか?

注:Cypherでループを使用せずにこれを取得する必要があるのは、これが私のクエリの一部に過ぎないためです。

予想される出力

(Acc) 

私はこのような何かが動作するはずと信じて、私はこの

答えて

1

このクエリは動作します出力パス全体のサイズ)。

0

を把握するために助けてください:name = 'Segment1'のノードから

MATCH ({name:'Segment1'})-[:Leaf|:Account|:Parent*]->(b) 
WITH collect(b) as nodes 
RETURN last(nodes) 

をこのクエリの開始とタイプ:Leaf:Accountおよびの関係を辿る〜bbの後には、collect()の機能を持つリストに集められます。その後、リストの最後のノードが返されます。これはlast()関数によって行われます。

0

あなたはこのクエリを試してみてください:最後の[親]ノードの

MATCH (Segment1 {name:'Segment1'})-[:Leaf]->(Op1)-[:Account]->(Ac2)-[*:Parent]->(Acc) 
WHERE size((Acc)-[:Parent]->()) = 0 
RETURN Acc 

定義は、WHERE句によって行われます。それはすぐに出Parent関係を持つすべてのAcc候補を無視するので、

MATCH (Segment1)-[:Leaf]->(Op1)-[:Account]->(Ac2)-[*:Parent]->(Acc) 
WHERE NOT (Acc)-[:Parent]->() 
RETURN Acc; 

@ logismaのソリューションとは異なり、このクエリは、よりパフォーマンスでなければなりません(代わりの決定:

乾杯

関連する問題