neo4j 如何选择除了指向自身之外没有任何关系的节点?

aamkag61  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(128)

我想得到那些只指向自身并且与其他节点没有关系的节点(只指向自身):

MATCH (z:zone) WHERE NOT (z)-[:CONNECTS]->(:zone) RETURN z

结果应该包括纽瓦克Airport和Baisley Park,因为我们可以看到这两个节点仍然具有关系,但与其他节点隔离。

ars1skjm

ars1skjm1#

下面的查询非常高效,因为它利用了getDegree operation,它不需要任何数据库命中。您可以profile查询来验证这一点。

MATCH (z:zone)-[:CONNECTS]->(z)
WHERE SIZE([(z)-[:CONNECTS]->()|1]) = 1
RETURN z

注1:为了使用getDegreeSIZE()函数中的模式解析必须是非特定的,这就是为什么在上面的一端使用()
注2:Neo4j 5不支持旧的语法SIZE((z)-[:CONNECTS]->()),因此这个答案在SIZE()函数中使用了更麻烦的模式理解。好消息是Cypher查询计划器仍然可以计算出它可以使用新语法的getDegree

相关问题