2017-04-11 1 views
0

パスのノードを特定のノードまで印字したいサイファーを書きたい。特定のノードの後で、私はノードを印刷する&を比較したくないです。Neo4j All break文を持つ関数/パス内のノードを特定の条件まで出力する

例えば

D{type:"fresh"} ---childOf--->C{type:"dirty"}----childOf---->B{type:"fresh"}-----childOf----->A{type:"fresh"} 

G{type:"fresh"} ---childOf--->F{type:"fresh"}----childOf---->E{type:"dirty"}-----childOf----->A{type:"fresh"} 

Aはrootです。

A)

私はO/Pをしたいとすぐに、私は任意のリストで汚れたノードを取得するよう、私は&マイO/Pを比較停止するような汚いノードまでのパスです。 Eが汚れているように、この場合、PがC F & GダーティであるとしてDが除去さ

c->B->A 

&

E->A 

ある/ Oが除去されます。両方の場合において、ルートができ:第2のケースで

b)は、私もそう

B->A 

&

にP変更/ O、汚れたノードを望んでいません汚れている&まだo/pは同じままにする必要があります。つまり、言い換えれば、ルートのタイプには関係しません。 O/pはルートのタイプに依存しません。

+0

あなたはどのラベルを使用していますか?次のものを使用できますか?プロパティの代わりにダーティラベル? – InverseFalcon

+0

現在、私はラベルとしてエンティティを使用しています。ラベルは、実際には1回以上、jst one conditipnと述べたラベルcozとして汚れていません。(type&sub_type) –

答えて

0

開始ノードを無視してこのプロパティにヒットしたときにトラバーサルを停止する方法はありません.Cypherではすぐに利用できます。私が知っているすべての解決策は、 "汚れた"ノードを越え、フィルタリングする必要があります。これは、トラバーサルが最も効率的でない場合でも、正しい答えを出すという点で、あなたのために役立ちます。

ノードをラベルとして使用し、文字を名前プロパティとして使用し、開始ノードのクイックルックアップのためにノード(名前)にインデックスを付けると、次のクエリが機能します。

MATCH path=(:Node{name:'A'})<-[:childOf*]-({type:'dirty'}) 
WITH path 
WHERE single(node in tail(nodes(path)) WHERE node.type = 'dirty') 
RETURN nodes(path)[..-1] as nodes 

プロパティの代わりに:ダーティー・ラベルを使用するオプションがある場合は、APOCプロシージャーでこれを行う方法があります。問題のラベルを持つノードをヒットするとすぐにトラバーサルを停止します。

関連する問題