Neo4j-10-Update-Data

Neo4j 第十篇:更新数据

转载:https://www.cnblogs.com/ljhdo/p/10929708.html

参考:https://neo4j.com/docs/developer-manual/3.2/cypher/clauses/

更新图包括图的节点和关系的创建、更新和删除,也能更新图的节点和关系的属性、节点标签和关系类型。

一 创建节点

1 创建空的节点

1
2
CREATE (n)
CREATE (a),(b)

2 创建带标签的节点

1
2
CREATE (n:Person)
CREATE (n:Person:Swedish)

3 创建带标签和属性的节点

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

二 创建关系

创建节点之前的关系

1 在两个节点之间创建关系

在两个节点之间创建关系,并设置关系类型

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

2 创建关系,并设置关系的属性

1
2
3
4
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 子句创建它;如果存在于图中,那么就会引用它。

1
2
CREATE p =(andres { name:'Andres' })-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael { name: 'Michael' })
RETURN p

三 删除节点和关系

使用 delete 子句删除节点、关系和路径,当删除节点时,该节点必须是孤立的节点,也就是说,必须首先删除跟节点相关的所有关系。

detach delete: 表示删除一个节点或多个节点,跟节点相关的所有关系也都被删除。

1 删除节点

1
2
MATCH (n:Person { name: 'UNKNOWN' })
DELETE n

2 删除所有节点和关系

1
2
MATCH (n)
DETACH DELETE n

3 删除一个节点和它的所有关系

1
2
MATCH (n { name: 'Andres' })
DETACH DELETE n

4 删除关系

1
2
MATCH (n { name: 'Andres' })-[r:KNOWS]->()
DELETE r

四 更新属性或标签

set 子句用于更新节点的标签,向节点和关系中添加属性

1 向节点或关系中添加属性

1
2
3
MATCH (n { name: 'Andres' })
SET n.surname = 'Taylor'
RETURN n.name, n.surname

2 移除属性

如果设置属性的值是 NULL,相当于把该属性从节点或关系中移除

1
2
MATCH (n { name: 'Andres' })
SET n.name = NULL RETURN n.name, n.age

3 复制属性

把一个节点的属性复制给另一个节点

1
2
3
MATCH (at { name: 'Andres' }),(pn { name: 'Peter' })
SET at = pn
RETURN at.name, at.age, at.hungry, pn.name, pn.age

4 从 Map 中添加属性

1
2
MATCH (p { name: 'Peter' })
SET p += { hungry: TRUE , position: 'Entrepreneur' }

5 在一条 set 子句中添加多个属性

1
2
MATCH (n { name: 'Andres' })
SET n.position = 'Developer', n.surname = 'Taylor'

6 向节点中添加标签

1
2
3
MATCH (n { name: 'Stefan' })
SET n:German
RETURN n.name, labels(n) AS labels

7 向节点中添加多个标签

1
2
3
MATCH (n { name: 'Emil' })
SET n:Swedish:Bossman
RETURN n.name, labels(n) AS labels

五 移除属性

使用 remove 子句从节点中移除标签和属性,从关系中移除属性。

1 移除属性

默认情况下,Neo4j不允许存在值为null的属性;如果属性不存在,那么返回该属性的值是null。

1
2
3
MATCH (a { name: 'Andres' })
REMOVE a.age
RETURN a.name, a.age

2 移除节点的标签

1
2
3
MATCH (n { name: 'Peter' })
REMOVE n:German
RETURN n.name, labels(n)

3 移除节点的多个标签

当节点的标签为空时,labels(n)函数返回空的list

1
2
3
MATCH (n { name: 'Peter' })
REMOVE n:German:Swedish
RETURN n.name, labels(n)

六 foreach 子句

列表和路径是 Cypher 中的关键概念,foreach 子句用于更新数据,例如,对路径中的元素或通过聚合创建的列表执行更新命令。

1 对路径中的元素执行更新命令

对路径中匹配的所有节点,添加 marked 属性,并设置属性值为 TRUE

1
2
3
MATCH p =(begin)-[*]->(END )
WHERE begin.name = 'A' AND END .name = 'D'
FOREACH (n IN nodes(p)| SET n.marked = TRUE )
Contents
  1. 1. Neo4j 第十篇:更新数据
    1. 1.1. 一 创建节点
      1. 1.1.1. 1 创建空的节点
      2. 1.1.2. 2 创建带标签的节点
      3. 1.1.3. 3 创建带标签和属性的节点
    2. 1.2. 二 创建关系
      1. 1.2.1. 1 在两个节点之间创建关系
      2. 1.2.2. 2 创建关系,并设置关系的属性
      3. 1.2.3. 3 CREATE 子句和模式
    3. 1.3. 三 删除节点和关系
      1. 1.3.1. 1 删除节点
      2. 1.3.2. 2 删除所有节点和关系
      3. 1.3.3. 3 删除一个节点和它的所有关系
      4. 1.3.4. 4 删除关系
    4. 1.4. 四 更新属性或标签
      1. 1.4.1. 1 向节点或关系中添加属性
      2. 1.4.2. 2 移除属性
      3. 1.4.3. 3 复制属性
      4. 1.4.4. 4 从 Map 中添加属性
      5. 1.4.5. 5 在一条 set 子句中添加多个属性
      6. 1.4.6. 6 向节点中添加标签
      7. 1.4.7. 7 向节点中添加多个标签
    5. 1.5. 五 移除属性
      1. 1.5.1. 1 移除属性
      2. 1.5.2. 2 移除节点的标签
      3. 1.5.3. 3 移除节点的多个标签
    6. 1.6. 六 foreach 子句
      1. 1.6.1. 1 对路径中的元素执行更新命令
|