Cypher通过关系获取根节点过滤器

时间:2018-08-15 07:35:07

标签: neo4j

我正在尝试创建一个密码语句,以从分层图结构中的给定节点a查找根节点n,其中某些节点被“停用”,这意味着该节点本身和所有连接关系具有属性deactivated,其日期为值。

当我还遍历已停用的节点时,我能够找到根节点:

MATCH (a)-[rs:child*]->(n)
WHERE NOT ()-[:child]->(a) AND id(n) = $n_id
RETURN DISTINCT a

我想我必须以某种方式消除关系rs并根据exists(r.deprecated)进行过滤。

另一个解决方案与{7.1.4。深度关系-与可变长度路径上的属性匹配”下的neo4j developer manual(v3.4)中的解决方案类似。 :

MATCH p =(charlie:Person)-[* { blocked:false }]-(martin:Person)

我希望找到一种解决方案,而不是必须为所有未停用的关系显式定义属性deactivated:false,而忽略具有非零deactivated属性的关系。

这些解决方案有可能吗?

1 个答案:

答案 0 :(得分:1)

我想我想出了一种可能的解决方案,方法是存储路径并删除关系具有属性deactivated的路径:

MATCH p = (a)-[:child*]->(n)
WHERE NOT ()-[:child]->(a) 
  AND id(n) = $n_id 
  AND NONE (r in relationships(p) WHERE exists(r.deactivated))
RETURN DISTINCT a