https://www.jianshu.com/p/59bd829de0de
總結提前:
【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的所有關系之前,是不能正確刪除節點的。
作者:布口袋_天晴了
鏈接:https://www.jianshu.com/p/59bd829de0de
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。