neo4j--Cypher語法練習(CREATE UNIQUE、 SET、 DELETE)

1.8 CREATE UNIQUE

           CREATE UNIQUE語句相當於MATCH 和 CREATE的混合體—儘可能地匹配,然後創建未匹配到的。

 可能會想到用MERGE來代替CREATE UNIQUE,然而MERGE並不能很強地保證關係的唯一性。                                                                                                  

          CREATE (root { name: 'root' }),(A { name: 'A' }),(B { name: 'B' }),(C{ name: 'C' })

          CREATE (root)-[:X]->(A),(root)-[:X]->(B),(root)-[:X]->(C),(A)-[:KNOWS]->(C)

          return root,A,B,C

  1.8.1 創建唯一節點

   (1)創建未匹配到的節點

MATCH (root { name: 'root' })

CREATE UNIQUE (root)-[:LOVES]-(someone)

RETURN someone

       

root節點沒有任何LOVES關係。因此,創建了一個節點及其與root節點的LOVES關係。注意這裏可以不指定關係方向

    (2)用含值的模式創建節點

MATCH (root { name: 'A' })

CREATE UNIQUE (root)-[:X]-(leaf { name: 'D' })

RETURN leaf

      沒有與root節點相連的name爲D的節點,所以創建一個新的節點來匹配該模式。

    (3)創建未匹配到帶標籤的節點

        如果描述的模式需要一個帶標籤的節點,而數據庫中沒有帶有給定標籤的節點,Cypher將創建一個新的。

MATCH (a { name: 'Node A' })l

CREATE UNIQUE (a)-[:KNOWS]-(c:blue)

RETURN c

        與'A'節點相連的KNOWS關係有一個'C'節點,但'C'節點沒有blue標籤。所以創建了一個帶有blue標籤的節點和從'A'到它的KNOWS關係。

1.8.2 創建唯一關係

(1)創建未匹配到的關係

     CREATE UNIQUE用於描述應該被找到的或需要創建的模式。

MATCH (lft { name: 'A' }),(rgt)

WHERE rgt.name IN ['B', 'C']

CREATE UNIQUE (lft)-[r:KNOWS]->(rgt)

RETURN lft, rgt

       匹配一個左節點和兩個右節點之間的關係。其中一個關係已存在,因此能匹配到。沒有匹配到的就會創建不存在的關係。

(2)用含值的模式創建關係

MATCH (root { name: 'root' })

CREATE UNIQUE (root)-[r:X { since: 'forever' }]-()

RETURN r

1.8.3 描述複雜模式

      就像MATCH和CREATE語句一樣,CREATE UNIQUE描述的模式也可以用逗號分隔。

MATCH (root { name: 'root' })

CREATE UNIQUE (root)-[:FOO]->(x),(root)-[:BAR]->(x)

RETURN x

1.9  SET

SET語句用於更新節點的標籤以及節點和關係的屬性。

1.9.1 設置屬性

       可以使用SET設置節點或者關係的屬性。

MATCH (n { name: ' Taylor Hackford' })

SET n.surname = 'Taylor'

RETURN n

        返回最新修改過的節點.

1.9.2 刪除屬性

       通常使用REMOVE來刪除一個屬性,但有時候也可以隨手用SET。將屬性設置爲null將刪除該屬性。如下:

MATCH (n { name: 'Taylor Hackford' })

SET n. surname = NULL

RETURN n

1.9.3 在節點和關係間拷貝屬性

     可以使用SET拷貝一個圖元素的所有屬性到另外一個圖元素。並創建了新節點。

MATCH (at { name: 'Andres' }),(pn { name: 'Peter' })

SET at = pn

RETURN at, pn

 1.9.4   從map中添加屬性

     當用map來設置屬性時,可以使用+=形式的SET來只添加屬性,而不刪除圖元素中已存在的屬性。

MATCH (peter { name: 'Peter' })

SET peter += { hungry: TRUE , position: 'Entrepreneur' }

1.9.5 使用一個SET語句設置多個屬性

     如果想一次設置多個屬性,簡單地用逗號分開即可。

MATCH (n { name: 'Andres' })

SET n.position = 'Developer', n.surname = 'Taylor' 

 1.9.6 設置節點的標籤

       用SET可給節點設置標籤。

MATCH (n { name: 'Stefan' })

SET n :German

RETURN n

1.9.7 給一個節點設置多個標籤

使用SET給一個節點設置多個標籤時,不同的標籤之間用冒號分隔。

MATCH (n { name: 'Emil' })

SET n :Swedish:Bossman

RETURN n

1.10  DELETE

1.10.1 刪除單個節點

MATCH (n:Useless)

DELETE n

1.10.2 刪除關係

match (root { name: 'root' })-[r]-(A { name: 'A' })

DELETE  r

1.10.3 刪除路徑

 

CREATE (d { name: 'Node D' }),(e { name: 'Node e' })

CREATE (d)-[r:x]->(e)

return d,e

 

match p=(d { name: 'Node D' })--(e { name: 'Node e' })

delete p

1.10.4  刪除一個節點及其所有的關係

     當需要刪除一個節點及與該節點的所有關係時,可用DETACH DELETE

MATCH (n { name: 'root' })

DETACH DELETE n

1.10.5 刪除所有節點和關係

      這個查詢對於少量數據可以,不適用於刪除巨量數據。

MATCH (n)

DETACH DELETE n

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章