更新圖包括圖的節點和關係的建立、更新和刪除,也能更新圖的節點和關係的屬性、節點標籤和關係類型。node
1,建立空的節點函數
CREATE (n)
CREATE (a),(b)
2,建立帶標籤的節點spa
CREATE (n:Person)
CREATE (n:Person:Swedish)
3,建立帶標籤和屬性的節點code
CREATE (n:Person { name: 'Andres', title: 'Developer' })
建立節點以前的關係blog
1,在兩個節點之間建立關係rem
在兩個節點之間建立關係,並設置關係類型文檔
MATCH (a:Person),(b:Person) WHERE a.name = 'A' AND b.name = 'B' CREATE (a)-[r:RELTYPE]->(b) RETURN type(r)
2,建立關係,並設置關係的屬性get
MATCH (a:Person),(b:Person) WHERE a.name = 'A' AND b.name = 'B' CREATE (a)-[r:RELTYPE { name: a.name + '<->' + b.name }]->(b) RETURN type(r), r.name
3,CREATE子句和模式it
在CREATE子句和模式中,對於模式中的任意部分,若是它不存在於圖中,那麼CREATE子句建立它;若是存在於圖中,那麼就會引用它。io
CREATE p =(andres { name:'Andres' })-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael { name: 'Michael' }) RETURN p
使用delete子句刪除節點、關係和路徑,當刪除節點時,該節點必須是孤立的節點,也就是說,必須首先刪除跟節點相關的全部關係。
detach delete: 表示刪除一個節點或多個節點,跟節點相關的全部關係也都被刪除。
1,刪除節點
MATCH (n:Person { name: 'UNKNOWN' }) DELETE n
2,刪除全部節點和關係
MATCH (n)
DETACH DELETE n
3,刪除一個節點和它的全部關係
MATCH (n { name: 'Andres' }) DETACH DELETE n
4,刪除關係
MATCH (n { name: 'Andres' })-[r:KNOWS]->() DELETE r
set子句用於更新節點的標籤,向節點和關係中添加屬性
1,向節點或關係中添加屬性
MATCH (n { name: 'Andres' }) SET n.surname = 'Taylor' RETURN n.name, n.surname
2,移除屬性
若是設置屬性的值是NULL,至關於把該屬性從節點或關係中移除
MATCH (n { name: 'Andres' }) SET n.name = NULL RETURN n.name, n.age
3,複製屬性
把一個節點的屬性複製給另外一個節點
MATCH (at { name: 'Andres' }),(pn { name: 'Peter' }) SET at = pn RETURN at.name, at.age, at.hungry, pn.name, pn.age
4,從Map中添加屬性
MATCH (p { name: 'Peter' }) SET p += { hungry: TRUE , position: 'Entrepreneur' }
5,在一條set子句中添加多個屬性
MATCH (n { name: 'Andres' }) SET n.position = 'Developer', n.surname = 'Taylor'
6,向節點中添加標籤
MATCH (n { name: 'Stefan' }) SET n:German RETURN n.name, labels(n) AS labels
7,向節點中添加多個標籤
MATCH (n { name: 'Emil' }) SET n:Swedish:Bossman RETURN n.name, labels(n) AS labels
使用remove子句從節點中移除標籤和屬性,從關係中移除屬性。
1,移除屬性
默認狀況下,Neo4j不容許存在值爲null的屬性;若是屬性不存在,那麼返回該屬性的值是null。
MATCH (a { name: 'Andres' }) REMOVE a.age RETURN a.name, a.age
2,移除節點的標籤
MATCH (n { name: 'Peter' }) REMOVE n:German RETURN n.name, labels(n)
3,移除節點的多個標籤
當節點的標籤爲空時,labels(n)函數返回空的list
MATCH (n { name: 'Peter' }) REMOVE n:German:Swedish RETURN n.name, labels(n)
列表和路徑是Cypher中的關鍵概念,foreach子句用於更新數據,例如,對路徑中的元素或經過聚合建立的列表執行更新命令。
1,對路徑中的元素執行更新命令
對路徑中匹配的全部節點,添加marked屬性,並設置屬性值爲TRUE
MATCH p =(begin)-[*]->(END ) WHERE begin.name = 'A' AND END .name = 'D' FOREACH (n IN nodes(p)| SET n.marked = TRUE )
參考文檔: