neo4j使用cypher查詢路徑避免出現環路



neo4j在使用可變長路徑找兩個點之前的所有路徑時,會返回包含環路的路徑(一個點在路徑中出現兩次),如下面的語句:

MATCH path = (x)-[:KNOWS*]-(y)
  
  
 
 
         

可能返回a->b->c->d->b->e這樣的路徑,如圖:


解決方法:

純cypher實現


   
   
  
  
          
  1. MATCH path = (x)-[:KNOWS*]-(y)
  2. UNWIND NODES(path) AS n
  3. WITH path,
  4. SIZE(COLLECT( DISTINCT n)) AS testLength
  5. WHERE testLength = LENGTH(path) + 1
  6. RETURN path

使用apoc


   
   
  
  
          
  1. MATCH path = (x)-[ :KNOWS*]-(y)
  2. WHERE SIZE(apoc.coll.toSet(NODES(path))) = LENGTH(path) + 1
  3. RETURN path

或者也可以這樣:


   
   
  
  
          
  1. MATCH path = (x)-[ :KNOWS*]-(y)
  2. WHERE apoc.coll.duplicates(NODES(path)) = []
  3. RETURN path

本文鏈接:https://blog.csdn.net/wry2008wry/article/details/80899860


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM