2016-11-13 8 views
0

ノードaからノードbまでのパスのすべてのノードをテストします(唯一MATCHステートメントのみ)。深さ以下の例では2Neo4J - 深さが未知のパス上のノードをテストします(MATCHのみ)

START a = node(86) 
MATCH p0 = a-[*..2]-b 
WHERE (b.attr = 'true') AND (a.attr = 'true') 
RETURN p0 

私の質問はどのように私は必要な深さを知らなくても、MATCH文を使用して、特定の属性(attr = 'true')のためのaとbの間のノードをテストするんです。

フィルタメソッドを使用すると、不要なすべてのノードを除外できます。以下のような :

START a = node(86) 
MATCH p0 = a-[*..2]-b 
RETURN filter(x IN nodes(p0) WHERE x.attr = 'true') 

しかし、それは私が必要なものではありませんが、私はMATCHを使用する必要があります。

答えて

1

Cypher refcard、具体的にはList Predicates sectionをご覧ください。 all()関数はこのトリックを行う必要があります。これが唯一のパターン内のすべてのノードが真としてその属性を持つパターンにマッチします

START a=node(86) 
MATCH p0=(a)-[*..2]-(b) 
WHERE ALL(node in nodes(p0) WHERE node.attr = true) 
RETURN p0 

:よう

何か。

+0

ありがとうございます。 –

+0

私はそれがあなたが探していたものに合うことを望みます。それがあなたのために働くなら、答えを受け入れてください。そうでない場合は、詳細を述べてください。私はあなたの要件をよりよく満たすための修正を行うことができます。 – InverseFalcon

+0

それはうまく動作します、私はあなたに投票したい、しかし私はそうするために、より多くの評判が必要です。 –

関連する問題