neo4j--Cypher学习笔记
(1)创建节点
create (n:User {name:"Dav"})
UNWIND[{name:"a"},{name:"b"}] AS p CREATE (n:Test) SET n=p
这个可以创建两个节点作为一个列表
out:
│[{"name":"a"},{},{"name":"b"}]
(2)创建关系
MATCH (n{name:"a"}),(m{name:"b"}) CREATE (n)-[r:KNOWS]->(m)
红色这个就是我们要的
out:
![](https://img.haomeiwen.com/i5186857/00f0340a4d9c296b.png)
![](https://img.haomeiwen.com/i5186857/d24d958d5bf37502.png)
MATCH (n{name:"a"}),(m{name:"Dav"}) CREATE (n)-[:朋友{亲密度:3}]->(m)
(3)用MERGE创建节点
MERGE (n:Test{name:"c"}) ON CREATE SET n.created = timestamp()
首先检查Test标签,属性为name的值的节点c是否存在,存在使用已有节点,否则创建一个新的节点。
(4)用MERGR创建关系
用合并的方式创建关系,先检测关系存不存在,若存在则不修改任何数据,否则创造新的关系
MATCH (a:Person{name:'Joel Silver'}),(b:Person{name:'J.T. Walsh'}) MERGE (a)-[r:LOVES]->(b)
匹配出名字叫Joel Silver的人和名字叫J.T. Walsh的人建立关系LOVES
出现这个话,代表已经建立成功了
Created 1 relationship, completed after 199 ms.
如果出现这个代表失败,可能是已经存在这个关系了也有可能是找不到叫这两个名字的人
(5)查询信息
MATCH (n:Person) RETURN n LIMIT 25
从标签为Person的图数据库里取出25条数据
(6)用SET更新数据
MERGE (n:Test{name:"a"}) SET n.created = timestamp()
用SET关键字修改节点n的属性created将其设置为当前时间,使用时间戳函数timestamp()来返回当前时间
UNWIND [{age:30},{addr:"sz"}] AS prop MERGE (n:Test{name:"b"}) SET n += prop
为原来的节点添加属性,addr和age
输出:
:193 addr: sz age:30 name:b
![](https://img.haomeiwen.com/i5186857/76c38802a652ab67.png)
(7)用DELETE删除数据
MATCH (n)DELETE n
这个会报错,因为必须删除关系才能删除节点
MATCH ()-[r:朋友]->(m) DELETE r,m
要这么操作,查找出朋友关系r以及朋友所指向的节点m,并同时把r和m删除
Deleted 1 node, deleted 1 relationship, completed after 8 ms.
(8)用REMOVE来移除数据
MATCH (n) REMOVE n:Test
用REMOVE来移除数据,移除带有Test标签的所有结点
Removed 3 labels, completed after 9 ms.
用REMOVE来移除节点时要小心,这个不会因为如果原来这个被删除的节点有其他关系
那么这个节点被删除后,关系会指向空节点
用来删除节点的属性
MATCH (n{name:"b"}) REMOVE n.age
输出:Set 1 property, completed after 8 ms.
(9)使用循环FOREACH
WITH ["a","b","c"] AS coll FOREACH (value IN coll | CREATE (:Person{name:value}))
这样会创建三个name叫a,b,c的Person
Added 3 labels, created 3 nodes, set 3 properties, completed after 7 ms.