如何排除Neo4j中的子树?

如何排除Neo4j中的子树?,neo4j,Neo4j,我在Neo4j中有一个简单的树形图。每个节点都是对象类型,具有id和名称属性,并且可以通过父子聚合链接到其他一些节点(图形是树,不允许循环) 我成功地运行了一个简单的查询,该查询返回一个特定的子树(在下面的示例中,以ID为127的节点为根): 但我需要一个查询,它还从上面的查询返回的子树中排除指定节点(比如131)根的子树。这个查询看起来怎么样 (我试过: MATCH network=(:Object{id:127})-[*]->(x:Object) 其中x.id 131 返回网络 ,这仅排除

我在Neo4j中有一个简单的树形图。每个节点都是
对象
类型,具有
id
名称
属性,并且可以通过父子
聚合
链接到其他一些节点(图形是树,不允许循环)

我成功地运行了一个简单的查询,该查询返回一个特定的子树(在下面的示例中,以ID为127的节点为根):

但我需要一个查询,它还从上面的查询返回的子树中排除指定节点(比如131)根的子树。这个查询看起来怎么样

(我试过:

MATCH network=(:Object{id:127})-[*]->(x:Object)
其中x.id 131
返回网络
,这仅排除没有子节点的单个节点

MATCH network = (:Object { id: 127 })-[*]->(x:Object)-[*]->()
WHERE x.id <> 131
RETURN network
MATCH network=(:Object{id:127})-[*]->(x:Object)-[*]->()
其中x.id 131
返回网络

)我找到了一种理解列表的方法

MATCH network = (:Object { id: 127 })-[*]->(x:Object)
WHERE NONE (n IN nodes(network) WHERE n.id = 131)
RETURN network
这工作很快,但可能存在更好的解决方案

MATCH network = (:Object { id: 127 })-[*]->(x:Object)-[*]->()
WHERE x.id <> 131
RETURN network
MATCH network = (:Object { id: 127 })-[*]->(x:Object)
WHERE NONE (n IN nodes(network) WHERE n.id = 131)
RETURN network