1. Neo4j入門(三)刪除關(guān)系

        共 1909字,需瀏覽 4分鐘

         ·

        2021-08-22 16:10

                本文將介紹筆者在工作中使用Neo4j時遇到的一個坑。
        ??下面筆者將會介紹這個問題。簡單來說,就是當(dāng)我們使用py2neo操作Neo4j時,delete方法會刪除整個子圖,而僅僅是刪除子圖中的關(guān)系是調(diào)用separate方法。以下舉例來說明。
        ??假設(shè)我們有如下圖譜:

        我們試圖刪除Alice -Knows-> Bob這條關(guān)系。我們使用py2neo調(diào)用delete來刪除該關(guān)系,示例代碼如下:

        from py2neo import Graph, Node, Relationship
        from py2neo import NodeMatcher, RelationshipMatcher

        # 連接Neo4j
        url = "http://localhost:7474"
        username = "neo4j"
        password = "12345678"
        graph = Graph(url, auth=(username, password))
        print("neo4j info: {}".format(str(graph)))

        start_node = NodeMatcher(graph).match("Person", name="Alice").first()
        end_node = NodeMatcher(graph).match("Person", name="Bob").first()
        rel = RelationshipMatcher(graph).match([start_node, end_node], r_type="Knows").first()
        print(rel)
        graph.delete(rel)

        輸出結(jié)果如下:

        neo4j info: Graph('http://neo4j@localhost:7474')
        (Alice)-[:Knows {}]->(Bob)

        可以發(fā)現(xiàn),我們是刪除了Alice -Knows-> Bob這條關(guān)系,但同時我們也刪除了Alice和Bob節(jié)點!
        ??如果我們將圖譜變?yōu)檫@樣:

        那么運行上述代碼也能成功,但是圖譜中僅剩下了Cook和Dan節(jié)點以及這兩個節(jié)點的關(guān)系,卻少了Alice、Bob節(jié)點和兩條關(guān)系,這無疑是可怕的結(jié)果!
        ??那么原因是什么呢?參考官方文檔:https://py2neo.org/2021.1/workflow.html#graph-objects中給出的說明,如下:

        也就是說,我們在調(diào)用delete方法時,會刪除這個子圖,并且通過上述的例子,與這個子圖的關(guān)聯(lián)關(guān)系也會隨之刪除。而我們的需求是僅僅刪除關(guān)系,那么應(yīng)該調(diào)用separate方法,因此,修改代碼如下:

        from py2neo import Graph, Node, Relationship
        from py2neo import NodeMatcher, RelationshipMatcher

        # 連接Neo4j
        url = "http://localhost:7474"
        username = "neo4j"
        password = "12345678"
        graph = Graph(url, auth=(username, password))
        print("neo4j info: {}".format(str(graph)))

        start_node = NodeMatcher(graph).match("Person", name="Alice").first()
        end_node = NodeMatcher(graph).match("Person", name="Bob").first()
        rel = RelationshipMatcher(graph).match([start_node, end_node], r_type="Knows").first()
        print(rel)
        graph.separate(rel)

        唯一的修改是將delete方法修改為separate方法,這樣我們就只刪除了Alice -Knows-> Bob這條關(guān)系,正是我們想要的結(jié)果。

        ??本文較為簡單,僅用于記錄工作中出現(xiàn)的問題。
        ??2021年8月18日于上海閔行,此日上海較為酷熱~


        瀏覽 147
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 国产偷v国产偷v精品视频 | 俺来俺来也www色官网 | 女被粗大的巴捣出白浆 | 中文字幕免费AV | 国产毛片AV一区二区三区牛牛影视 |