Neo4j 第十篇:更新數據


更新圖包括圖的節點和關系的創建、更新和刪除,也能更新圖的節點和關系的屬性、節點標簽和關系類型。

一,創建節點

1,創建空的節點

CREATE (n)
CREATE (a),(b)

2,創建帶標簽的節點

CREATE (n:Person)
CREATE (n:Person:Swedish)

3,創建帶標簽和屬性的節點

CREATE (n:Person { name: 'Andres', title: 'Developer' })

二,創建關系

創建節點之前的關系

1,在兩個節點之間創建關系

在兩個節點之間創建關系,並設置關系類型

MATCH (a:Person),(b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[r:RELTYPE]->(b)
RETURN type(r)

2,創建關系,並設置關系的屬性

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子句和模式

在CREATE子句和模式中,對於模式中的任意部分,如果它不存在於圖中,那么CREATE子句創建它;如果存在於圖中,那么就會引用它。

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)

六,foreach子句

列表和路徑是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 )

 

 

參考文檔:

Cypher Clauses


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM