1

我有一个 neo4j 密码遍历问题。

设置:我有一个从节点“a”开始的查询,并为我提供了关系为“FOO”的所有路径。所有这些“FOO”关系都有一个参数“BAR”。参数“BAR”可以有 2 个(或更多)值“1”和“2”。现在我想排除所有包含一个或多个 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)
    匹配 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 回答