neo4j 刪除重複節點

2021-10-05 11:47:55 字數 1635 閱讀 9885

這裡的重複節點指的是乙個label下的部分節點,屬性a相同,其他屬性不相同

本文中的資料為舉例說明,實際資料不便展示,但表達的意思一致;

1. neo4j中label為person的的節點有name和wechat兩個屬性,關係type為friend;

2. 在進行資料的清洗和預處理過程中,name對應的wechat資料獲取出現偏差,導致乙個name在先後獲取wechat時取到了不同的值,導致乙個人員錄入了兩個節點,如name=tom前後獲取wechat時分別獲取到了123和456兩個值,最終在neo4j中儲存的節點有兩個:

(:person)

(:person)

3. 匯入的關係資料是以name為參照建立的,比如 tom 和 jerry 為 friend 關係,由於節點資訊的錯誤,則在庫中將存在兩個關係,但實際只應存在乙個有效關係:

(:person)-[:friend]-(:person)

(:person)-[:friend]-(:person)

3. 優化資料清洗和預處理程式後,能確保獲取到唯一乙個wechat值,這時neo4j中已經匯入了千萬級節點和關係,重新匯入的話耗時太長;

1. 節點中name對應的wechat可能會有多個值,但後面的資料分析只需要乙個即可,由於節點和關係都是批量匯入的,所以同樣是name="tom"的節點,先導入的節點對應的關係將會多於後匯入的節點對應的關係;

2. 解決方案為刪除name屬性相同的重複節點,保留重複節點中第乙個錄入的節點,後面錄入的節點及其關係刪除;

1. 檢視庫中是否存在重複節點:

# 查詢節點總數

match (n:person) return count(n)

# 查詢乙個屬性的去重數量

match (n:person) return count(distinct n.name) # 比較總數和去重後總數可判斷是否存在相同name的節點

2. 獲取重複節點的詳細資訊:

# 查詢返回name相同但是節點id不同的節點,n與m即為重複節點

match (n:person),(m:person) where n.name=m.name and id(n)<>id(m) return n,id(n),m,id(m);

# 比較重複節點的關係數量可只最先錄入的節點的關係最為完整最多,後面錄入的節點會缺少部分關係

# 以上一查詢中返回的重複節點 id=12 和 id=460964 進行比較

match (n:person)-[:friend]-(m:person) where id(n)=12 rerurn count(m);

match (n:person)-[:friend]-(m:person) where id(n)=46096 rerurn count(m);

3. 獲取每條重複節點記錄中的id較大值,刪除該節點及節點所有關係:

match (n:person)-[r:friend]-(:person) where id(n)=46096 delete n,r;

更新neo4j節點資訊

將多個屬性的內容更新到節點上 def update by id id,graph,kwargs 更新節點的屬性 根據節點的id來更新節點的屬性,如果存在該屬性,則更新,如果不存在該屬性,則新增 if graph is none graph get graph if kwargs is none re...

Neo4j刪除節點和關係 徹底刪除節點標籤名

總結提前 先刪關係,再刪節點 當記不得關係名時,type r 可以查到關係名 徹底刪除節點標籤名,需要刪除前期對該標籤名建立的索引 問題描述 資料庫裡已經建立好了節點和關係,現在想刪除bc company bc knowledge bc person coin這4類節點,但是它們之間存在複雜的關係。...

neo4j建立節點之間的關係

節點的建立時很簡單的,只要用create建立名字和屬性即可。但是節點的關係建立有點複雜,因為需要考慮如何匹配到有關係的兩個節點,以及關係本身的屬性如何設定。這裡我簡單學一下如何建立節點之間的關係。選擇的順序是由易到難,而不是場景的使用頻率。語法 create return 案例 create fb1...