Neo4j 密码 - 搜索节点之间没有路径

Neo4j cypher - search for nodes with no path between them

我正在尝试寻找一种通用方法来搜索没有 link 到另一个节点或节点集的节点或节点集。 例如,我能够找到特定类型的所有节点(例如 :Style),这些节点 以某种方式连接到一组特定的节点(例如 :MetadataRoot),具有以下内容:

match (root:MetadataRoot),
(n:Style),
p=shortestPath((root)-[*]-(n))
return p

使用这个,我能够从上述查询返回的节点中减去 all :Style 节点的集合,但这看起来不像解决这个问题的最佳方法。

如果您知道起始节点的标签,您可以使用 EXISTS 函数:

MATCH (n:Style)
WHERE NOT EXISTS((n)-[]-())
RETURN n

如果你知道结束节点:

MATCH (n:Style)
WHERE NOT EXISTS ((n)-[*]-(:MetadataRoot))
RETURN n

编辑:

不确定,但关于您评论中的性能问题,解决方法可能是这样的:

MATCH p=allShortestPaths((n:Style)-[*]-(:MetadataRoot))
WITH nodes(p) as nodesRelated
MATCH (s:Style) WHERE NOT s IN nodesRelated