1

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" |
    +---------------------------------------------------------------- --------------------------+

4

1 に答える 1

1

はコレクションであるため、述語関数rhを適用できます。

START n=node(4) 
MATCH n-[rh:FOO*]->b 
WHERE not any(r in rh where r.BAR="2") 
RETURN rh;
于 2013-03-11T11:01:47.123 に答える