[英]Neo4j cypher - search for nodes with no path between them
我正在嘗試找到一種通用方法來搜索沒有鏈接到另一個節點或節點集的節點或節點集。 例如,我能夠找到特定類型(例如:Style
)的所有節點,這些節點以某種方式連接到一組特定的節點(例如:MetadataRoot
),如下所示:
match (root:MetadataRoot),
(n:Style),
p=shortestPath((root)-[*]-(n))
return p
使用它,我能夠從上述查詢返回的節點中減去所有:Style
節點的集合,但這似乎不是 go 的最佳方式。
如果您知道起始節點的標簽,則可以使用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
這應該更快並且需要更少的資源來執行:
MATCH (n:Style),
OPTIONAL MATCH p=shortestPath((:MetadataRoot)-[*0..40]-(n))
WITH n, p
WHERE p IS NULL
RETURN n ```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.