查找没有特定关系的节点(Cypher / neo4j)

时间:2014-09-04 19:04:33

标签: database neo4j cypher

我有一个带有以下内容的neo4j数据库:

a:Foo
b:Bar

大约10%的db有(a)-[:has]->(b)

我只需要获得没有这种关系的节点!

以前做()-[r?]-()会很完美!然而,它不再受支持:(相反,做他们建议

OPTIONAL MATCH (a:Foo)-[r:has]->(b:Bar) WHERE b is NULL RETURN a

给我一​​个null结果,因为可选匹配需要BOTH节点在那里或BOTH节点不在那里......

那么我如何获得未附加到a:Foo的所有b:Bar个节点?

注意:数据集是数百万个节点,因此查询需要高效或以其他方式超时。

2 个答案:

答案 0 :(得分:29)

那将是

MATCH (a:Foo) WHERE not ((a)-[:has]->(:Bar)) RETURN a;

答案 1 :(得分:5)

如果您正在寻找所有单身人士/孤儿,这也有效:

MATCH (a:Foo) WHERE not ((a)--()) RETURN a;