總結提前:
【1】先删關系,再删節點
【2】當記不得關系名時,type(r)可以查到關系名
【3】徹底删除節點标簽名,需要删除前期對該标簽名建立的索引
問題描述:
資料庫裡已經建立好了節點和關系,現在想删除BC_Company、BC_Knowledge、BC_Person、Coin這4類節點,但是它們之間存在複雜的關系。

先删節點會遇到錯誤。當節點與其他節點存在關系的時候,删除該節點就會報錯,錯誤提示你應該先删除它的關系們。是以應該先删關系,再删節點。
1删除某類節點的所有關系。
假設我目前想删除BC_Person這類節點,但是這類節點與其他節點存在關系,并且我還不知道是什麼關系,那麼怎麼删除BC_Person這類節點,以及它存在的所有關系?
通過語句:MATCH (n:BC_Person)-[r]-() RETURN n,r可以檢視到以下資訊
通過語句:MATCH (n:BC_Person)-[r]-() DELETE n,r (删除節點,以及與之相關的所有關系)
雖然上圖執行語句後顯示:删除了1520個節點,删除了1530個關系。
如果再點選資料庫中的BC_Person節點還有傳回值,說明還有一些不存在關系的節點沒有删除掉。是以還得再用語句:MATCH (n:BC_Person) DELETE n 確定BC_Person類型節點完全删除幹淨了。
使用以上語句删除幹淨了所有節點,但是節點标簽BC_Person還留存在資料标簽裡
如果BC_Person該标簽名,你未來不想使用了,那麼可以參考How to delete labels in neo4j?該連結說沒有删除标簽名是因為這個标簽名還建立得有索引。
删除BC_Person節點索引後,該标簽就不顯示在标簽清單裡了
2删除某類節點的某個關系
假設要删除BC_Knowledge類節點的某個關系,但是你忘記具體的關系名是什麼了,是以應該檢視BC_Knowledge類存在哪些關系,關系名是什麼。具體語句:MATCH (n:BC_Knowledge)-[r]-() RETURN r,type(r)
然後再指定要删除的具體的關系名,假如我要删除BC_Knowledge類的companyTagIs關系。語句:MATCH (n:BC_Knowledge)-[r:companyTagIs]-() DELETE r 具有删除某一個關系。注意,如果DELETE時将n也放在其後,會出問題,因為n即BC_Knowledge還存在其他關系,在你還沒有删除掉BC_Knowledge的所有關系之前,是不能正确删除節點的。
作者:布口袋_天晴了