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



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

a:Foo
b:Bar

约10%的数据库具有(a)-[:has]->(b)

我只需要得到那些没有这种关系的节点!

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

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

给了我一个空结果,因为可选匹配需要BOTH节点在那里或BOTH节点不在那里。。。

那么,如何获得所有未连接到b:Bara:Foo节点呢?

注意:数据集有数百万个节点,因此查询需要高效,否则就会超时。

那将是

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

如果您正在寻找所有单身汉/孤儿,这也适用:

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

最新更新