這裡的重複節點指的是乙個label下的部分節點,屬性a相同,其他屬性不相同
本文中的資料為舉例說明,實際資料不便展示,但表達的意思一致;1. 節點中name對應的wechat可能會有多個值,但後面的資料分析只需要乙個即可,由於節點和關係都是批量匯入的,所以同樣是name="tom"的節點,先導入的節點對應的關係將會多於後匯入的節點對應的關係;1. neo4j中label為person的的節點有name和wechat兩個屬性,關係type為friend;
2. 在進行資料的清洗和預處理過程中,name對應的wechat資料獲取出現偏差,導致乙個name在先後獲取wechat時取到了不同的值,導致乙個人員錄入了兩個節點,如name=tom前後獲取wechat時分別獲取到了123和456兩個值,最終在neo4j中儲存的節點有兩個:
3. 匯入的關係資料是以name為參照建立的,比如 tom 和 jerry 為 friend 關係,由於節點資訊的錯誤,則在庫中將存在兩個關係,但實際只應存在乙個有效關係:(:person)
(:person)
3. 優化資料清洗和預處理程式後,能確保獲取到唯一乙個wechat值,這時neo4j中已經匯入了千萬級節點和關係,重新匯入的話耗時太長;(:person)-[:friend]-(:person)
(:person)-[:friend]-(:person)
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...