neo4j在使用可變長路徑找兩個點之前的所有路徑時,會返回包含環路的路徑(一個點在路徑中出現兩次),如下面的語句:
MATCH path = (x)-[:KNOWS*]-(y)
可能返回a->b->c->d->b->e這樣的路徑,如圖:
解決方法:
純cypher實現
-
MATCH path = (x)-[:KNOWS*]-(y)
-
UNWIND NODES(path)
AS n
-
WITH path,
-
SIZE(COLLECT(
DISTINCT n))
AS testLength
-
WHERE testLength = LENGTH(path) +
1
-
RETURN path
使用apoc
-
MATCH path = (x)-[
:KNOWS*]-(y)
-
WHERE SIZE(apoc.coll.toSet(NODES(path))) = LENGTH(path) +
1
-
RETURN path
或者也可以這樣:
-
MATCH path = (x)-[
:KNOWS*]-(y)
-
WHERE apoc.coll.duplicates(NODES(path)) = []
-
RETURN path
本文鏈接:https://blog.csdn.net/wry2008wry/article/details/80899860