neo4j サイファー トラバーサルの問題があります。
セットアップ: ノード "a" から始まるクエリがあり、関係 "FOO" を持つすべてのパスが返されます。これらすべての「FOO」リレーションには、パラメーター「BAR」があります。パラメータ "BAR" には、"1" と "2" の 2 つ (またはそれ以上) の値を指定できます。ここで、1 つ以上の FOO.BAR="2" リレーションを含むすべてのパスを除外したいと考えています。
クエリ: START a=node(x) MATCH a-[rh:FOO*]->b RETURN rh; rh は考えられるすべてのパスを提供してくれますが、関係に関する基準を追加する方法がわかりません。
コンソールでシナリオを作成しました ( http://console.neo4j.org/?id=219eub )
作成
(a {name:"A"})、
(b {name:"B"}),
(c {name:"C"}),
(d {name:"D"}),
b-[:FOO{BAR:'1'}]->a,
d-[:FOO{BAR:'1'}]->a,
c-[:FOO{BAR:'2'}]->b,
d-[:FOO{BAR:'1'}]->c
開始 n=ノード(4)
MATCH n-[rh:FOO*]-b
戻るrh;
これにより、クエリ結果が得られます
+---------------------------------------------------------------- --------------------------+
| | n.name | 右 | b.名前 |
+---------------------------------------------------------------- --------------------------+
| | "D" | [:FOO[2] {BAR:"1"}] | "あ" |
| | "D" | [:FOO[3] {BAR:"1"}] | "C" |
| | "D" | [:FOO[3] {BAR:"1"},:FOO[1] {BAR:"2"}] | "B" |
| | "D" | [:FOO[3] {BAR:"1"},:FOO[1] {BAR:"2"},:FOO[0] {BAR:"1"}] | "あ" |
+---------------------------------------------------------------- --------------------------+
しかし、私は欲しいだけです
+---------------------------------------------------------------- --------------------------+
| | n.name | 右 | b.名前 |
+---------------------------------------------------------------- --------------------------+
| | "D" | [:FOO[2] {BAR:"1"}] | "あ" |
| | "D" | [:FOO[3] {BAR:"1"}] | "C" |
+---------------------------------------------------------------- --------------------------+