我有一个neo4j cypher遍历问题。
设置: 我有一个查询从节点“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)
create (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 START n=node(4) MATCH n-[rh:FOO*]-b RETURN rh;
这给了我 查询结果
+---------------------------------------------------------------------------+ | n.name | rh | b.name | +---------------------------------------------------------------------------+ | "D" | [:FOO[2] {BAR:"1"}] | "A" | | "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"}] | "A" | +---------------------------------------------------------------------------+
但我只想要
+---------------------------------------------------------------------------+ | n.name | rh | b.name | +---------------------------------------------------------------------------+ | "D" | [:FOO[2] {BAR:"1"}] | "A" | | "D" | [:FOO[3] {BAR:"1"}] | "C" | +---------------------------------------------------------------------------+
答案 0 :(得分:1)
由于rh
是一个集合,您可以应用predicate functions:
START n=node(4)
MATCH n-[rh:FOO*]->b
WHERE not any(r in rh where r.BAR="2")
RETURN rh;