Neo4j cypher查询以获取与特定其他节点无关的所有节点

时间:2016-02-18 13:57:54

标签: neo4j cypher

我使用Neo4j 2.3.1并且正在寻找一个密码查询,该查询为我提供了数据库中未连接到特定其他节点的所有节点。 我的树看起来像这样:

enter image description here

我知道红色的那个,想要一个给我绿色的查询。他们都有相同的关系。

编辑:我的问题是误导性的,所以:我想要的(如图中所示)所有节点都在特定节点“上方”以及他们的孩子。

3 个答案:

答案 0 :(得分:2)

这应该有效:

MATCH (red)<-[*]-(parent)-[*0..10]->(children)
WHERE red.id = xxx
RETURN parent, children

找到红色节点的所有父母以及父母的所有孩子。

答案 1 :(得分:1)

通常,图表DB可以有多个不相交的子图(甚至不必是树)。例如,假设有其他节点未以任何方式连接到子图。

以下是一种可以通过前向REL关系获取未连接到指定节点的所有节点的方法。我假设有趣的节点都有相同的标签(Foo),并且还有其他没有该标签的节点。

MATCH (n:Foo { id: 123 })-[:REL*]->(m:Foo)
WITH (COLLECT(DISTINCT m) + n) AS not_wanted
MATCH (x:Foo)
WHERE NOT x IN not_wanted
RETURN x;

注意:此查询可能需要很长时间(或耗尽内存),具体取决于&#34;树&#34;以n为根,是数据库中有多少个节点。您应该省略不能帮助您过滤掉任何内容的节点标签。

答案 2 :(得分:0)

取决于。假设您的所有节点标签都相同,这应该有效:

   MATCH (a:circle)-[r]->(b:circle)
    WHERE a.colour <> 'Red' AND b.colour <> 'Red'
    RETURN a,b