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 |