2017-03-03 22 views
0

如何刪除密碼程序返回的較小路徑,這些路徑已包含在包含在相同結果中的其他較長路徑中?從密碼庫返回的路徑列表中刪除較小的子集路徑

例如,如果我的密碼是MATCH path=(n)-[:REL*]->(m) where id(n)=<some id> return path。因此它返回包含任何數量的類型爲[:REL]的傳出關係的所有路徑。然而,它爲較長的路徑(包含多於2個節點)返回多個路徑,每個路徑包含從指定的開始節點到較長路徑中的連續節點的路徑。正如你可以看到(a)-[:REL]->(b)包含在所有

  • (a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
  • (a)-[:REL]->(b)-[:REL]->(c)
  • (a)-[:REL]->(b)-[:REL]->(d)

(a)-[:REL]->(c)

(a)-[:REL]->(b) 
(a)-[:REL]->(b)-[:REL]->(c) 
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f) 
(a)-[:REL]->(b)-[:REL]->(d) 
(a)-[:REL]->(c) 
(a)-[:REL]->(c)-[:REL]->(e) 

:例如,它可能會返回以下路徑containe d在(a)-[:REL]->(c)-[:REL]->(e)

(a)-[:REL]->(b)-[:REL]->(c)包含在(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)

我不想(a)-[:REL]->(b)(a)-[:REL]->(c)(a)-[:REL]->(b)-[:REL]->(c)出現在輸出,因爲它們的其他路徑的一部分。

cypher可能嗎?不知怎的,我覺得(儘管感覺這很奇怪),密碼在關係規範之前應該允許!(邏輯上不是)暗示特定類型的關係不會離開(或進入)節點。我可以這樣寫:

MATCH path=(n)-[:REL*]->(m)!-[:REL]->() where id(n)=<some id> return path 

這將不允許這些較小的路徑。

反正我怎麼能在cypher以上做?

回答

1

可以爲此添加篩選,只返回路徑,其中端部節點沒有傳出:REL關係:

MATCH path=(n)-[:REL*]->(m) 
where id(n)=<some id> and not (m)-[:REL]->() 
return path 
+0

是啊,我需要實踐CYPHER更多...切換頻繁科技股不允許我說:\ – Mahesha999