2017-04-14 55 views
0

我在Neo4j中有一个简单的树形图。每个节点的类型为Object,具有idname属性,并且可以通过父子链接AGGREGATION链接与其他一些节点(图形是树,不允许循环)。如何排除Neo4j中的子树?

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

MATCH network = (:Object { id: 127 })-[*]->() 
RETURN network 

但我需要一个查询,这也排除了的子树,由根指定的节点(比如131),从上面的查询返回的子树中。这个查询是怎样的?

(我试过:

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

,这仅排除单个节点,如果它没有孩子

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

,也不起作用。)

回答

0

我通过列表解析发现一种方法

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

这工作相当快,但也许有更好的解决方案存在?...