假设我有一棵树,其中某些节点具有给定类型的关系,除了那些具有给定关系 及其后代 的节点之外,我将如何返回树中的所有节点?强>
我已经用这样的东西到达了一半(树构建在has
链接上):
match (root: {Name: 'Root'})-[:has*]->(n) where not (n)-[:Exemption]-() return n
但是,当然,这会排除关系类型为Exemption
而不是其后代 的节点,因此后代显示为未连接的节点< / p>
如何构建查询?
答案 0 :(得分:3)
此查询应该有效:
MATCH p=({Name: 'Root'})-[:has*]->(n)
WHERE NONE(x IN NODES(p) WHERE (x)-[:Exemption]-())
RETURN n;
它会过滤掉与{也}具有:has
关系的节点的所有:Exemption
关系路径。
答案 1 :(得分:1)
我可能会把路径分成两部分:
MATCH p=(:Label {Name: 'Root'})-[:has*]->(n) WHERE NOT EXISTS ((n)-[:Exemption]->())
MATCH p2 = (n)-[:has*]->(m) WHERE NOT (m)-[:has]->()
RETURN p,p2;
答案 2 :(得分:0)
match (root: {Name: 'Root'})-[:has*]->(n)
match (m)-[:has*]->(n)
where not (m)-[:Exemption]-()
return n
基本上说:找到路径,对于该路径上的任何节点,遍历以确保没有祖先显示异常。所以我在这里否定的是用第二场比赛创建的子路径