Neo4j cypher - 搜索它们之间没有路径的节点

时间:2015-01-05 10:59:32

标签: neo4j cypher

我试图找到一种通用方法来搜索没有到另一个节点或一组节点的链接的节点或节点集。 作为一个例子,我能够找到特定类型的所有节点(例如:Style 以某种方式连接到特定的节点集(例如:MetadataRoot),以下内容:

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

使用此功能,我能够从上述查询返回的节点中减去所有 :Style节点的集合,但这似乎不是最好的方法。走吧。

1 个答案:

答案 0 :(得分:2)

如果您知道起始节点的标签,则可以使用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
相关问题