Neo4j基本操作

  • Part1:如何启动Neo4j
  • Part2:创建节点
  • Part3:创建关系
  • Part4:关于Match(查找)语句
  • Part5:删除节点和关系
  • Part6:筛选——where
  • Part 7: Remove 和 Set 语句
  • Part 8:Sorting排序
  • Part 9:Limit&skip语句
  • Part 10:merge--创建新节点


Part1:如何启动Neo4j

Windows+R,输入cmd,以管理员身份运行,在命令栏内输入:neo4j.bat console 
运行后在浏览器上访问: “http://localhost:7474/”输入密码后即可(初始密码为neo4j)

Part2:创建节点

在$内输入语句即可
创建节点用**CREATE**语句
• 通过CREATE创建一个节点
• () 代表一个节点
• 节点包括标示符和标签label
• {} 包含了属性如果想返回创建的数据,需要指定标示符  即:return 标示符;
创建多个节点数据,多个元素间用逗号或者用create分开

例1:创建一个无属性节点:

Create (r1:Rapper) return r1;

其中r1为标示符,Rapper为标签,生成图如下:

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像


例2:生成有属性的节点:

Create (r2:Rapper{name:"Pharaoh",Team:"Walkingdead"}) return r2;

r2为标示符,Rapper为标签,有两个属性name和Team

neo4j 国内镜像 neo4j使用教程_删除节点_02


一次创造多个节点:

Create (r3:Rapper{name:"KeyNG",Team:"Walkingdead",award:"champion"})  
Create(r4:Rapper{name:"GAI",Team:"GOSH",award:"champion"})

多节点之间用Create隔离

neo4j 国内镜像 neo4j使用教程_删除节点_03


例3:创建一个有多个标签的节点

一个节点可以有多个标签,注意在标签之间加上 “:”即可。

Create (r5:Rapper:Producer:Composer{name:"Cloud"})

创建结果如图:

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_04


此时可以发现多了几个标签,由原来的只有Rapper,增加了Composer和Producer

neo4j 国内镜像 neo4j使用教程_入门_05


创建的所有节点代码如下:

Create (r1:Rapper) 
Create (r2:Rapper{name:"Pharaoh",Team:"Walkingdead"}) 
Create (r3:Rapper{name:"KeyNG",Team:"Walkingdead",award:"champion"})
Create(r4:Rapper{name:"GAI",Team:"GOSH",award:"champion"})
Create (r5:Rapper:Producer:Composer{name:"Cloud"})
Create(r6:Rapper{name:"Tupac",AKA:"2pac"})

创建后的结果如下:

neo4j 国内镜像 neo4j使用教程_入门_06


neo4j 国内镜像 neo4j使用教程_入门_07

Part3:创建关系

我们可以给已经存在的节点创造关系,关系也类似节点也是有标签的,也是有有属性无属性两类。

语法:
–> 表示一个有指向的关系
[] 能够添加标示符,属性,类型等信息
关系也是有标签的,有属性的。
先用”match(标示符:标签)“匹配到才能创建关系

例1:创建无属性的指向关系

match(r2:Rapper{name:"Pharaoh"}),(r3:Rapper{name:"KeyNG"})
create(r2)-[:队友]->(r3)

*注:要是创建关系的两个对象标签相同,需加上属性一栏的name,否则程序将创建标签与标签间的关系

neo4j 国内镜像 neo4j使用教程_属性值_08

例2:创建有属性的关系
在上述队友关系的基础上我们可以为队友这一项增加多个属性,如增加时间及共属的团队

match(r2:Rapper{name:"Pharaoh"}),(r3:Rapper{name:"KeyNG"})
create(r2)-[:队友{时间:"2018年夏",共属的团队:"Walkingdead"}]->(r3)

在table中可看到相关节点的属性和关系的属性

neo4j 国内镜像 neo4j使用教程_删除节点_09


但是多次建立关系的后果即:在两个节点之间有两个”认识“的关系链,可以用下述代码尝试,会带来很恐怖的事情

match(r2:Rapper),(r3:Rapper)
create(r2)-[:认识]->(r3)

例3:创建新节点及新关系

Create (r6:Rapper{name:"Buzzy",Team:"Walkingdead"})-[:存在意见不合{时间:"2017年末"}]->(r7:Rapper{name:"Masiwei",Team:"Higherbrother"})

一口气创建了两个节点,一个关系,且这两个节点分别还有两个属性,关系也有一个属性,大大提高了代码书写效率

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_10


neo4j 国内镜像 neo4j使用教程_入门_11

Part4:关于Match(查找)语句

基本语法:

MATCH 
(
   <node-name>:<label-name>
)

其中 node-name为标示符,label-name为标签

例1:查找Pharaoh

MATCH (r2:Rapper{name:"Pharaoh"})
RETURN r2

查找结果如下图(因为标签为Rapper的节点很多,因此需要加上要查找节点独特的属性方能准确查找出来)

可在table里面看到其所有属性

neo4j 国内镜像 neo4j使用教程_Neo4j_12


例2:查找节点的属性

我们以查找Pharaoh的属性为例:

标示符.要查询的属性为基本语句

MATCH (r2:Rapper{name:"Pharaoh"})
RETURN r2.Team

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_13


例3:查找节点的所有关系

以查找Buzzy的关系为例

查找时可缺省标示符仅用标签和节点属性进行查找

MATCH p = (:Rapper{name:'Buzzy'})-[]->()
RETURN p

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_14

Part5:删除节点和关系

5.1.删除一个节点
删除一个节点有两种方法,一种是通过 id 属性,一种是通过name 属性(其中name属性需自己创建,id属性则自动生成)
我们先创建一个临时节点然后用两种方式进行删除
创建节点:

Create(r:Rapper{name:"6ix9ine",Team:"Blood"})

点击这个节点我们可以看到其id为83,name为6ix9ine

neo4j 国内镜像 neo4j使用教程_删除节点_15


5.1.1通过 name 属性 删除这一个节点,如下所示:

MATCH(r:Rapper{name:"6ix9ine"})
delete r

neo4j 国内镜像 neo4j使用教程_删除节点_16


5.1.2通过id属性删除该节点

MATCH (r)
WHERE id(r) = 84
DELETE r

neo4j 国内镜像 neo4j使用教程_删除节点_17


5.2. 删除一个节点及其所有的关系

先创建若干个临时节点与临时关系

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_18


删除代码如下:

MATCH (r)
WHERE id(r) = 83
DETACH DELETE r

删除后结果如下

neo4j 国内镜像 neo4j使用教程_属性值_19


5.3.删除一个标签下的所有节点与关系

代码如下,其中r为标示符,Loc为要删除标签的名称

MATCH (r:Loc)
DETACH DELETE r

将temp标签下的节点与关系全部删除

neo4j 国内镜像 neo4j使用教程_删除节点_20

5.4 删除所有节点与关系

仅需一段代码
删完就没了,请慎重使用

MATCH (r)
DETACH DELETE r

Part6:筛选——where

where语句是用来筛选节点或关系的。

6.1 筛选节点

6.1.1查找GAI

方法1

match (r)
where n.name="GAI"
return n

方法2

match (r:Rapper)
where r.name="GAI"
return r

注:命令1是遍历所有之后,才根据条件name='小黄’筛选出来的,当节点过多的时候,建议采用命令2去查找,有label这个设定之后,遍历的节点范围会有所缩小,速度会更快一些,所占用内存空间也会减少。

6.1.2 查找GAI和Pharaoh

match (r:Rapper)
where r.name='GAI' or r.name='Pharaoh'
return r

注:查找用的是or不是and

neo4j 国内镜像 neo4j使用教程_入门_21


6.2 筛选关系

待细究

查找关系的属性是制作的节点

可理解为r是关系的标示符,标示符.bulabula代表关系的属性(可类比Java里的.操作符,作为引用方法)

match p= (r:Rapper)-[r]->(r1:Rapper)
where r.relationship="制作"
return p

Part 7: Remove 和 Set 语句

SET:向现有节点或关系添加新属性。
REMOVE:来删除节点或关系的现有属性。

DELETE和REMOVE命令之间的主要区别
1.DELETE操作用于删除节点和关联关系。
2.REMOVE操作用于删除标签和属性。

DELETE和REMOVE命令之间的相似性
1.这两个命令不应单独使用。
2.两个命令都应该与MATCH命令一起使用。

7.1 Remove语句的作用

REMOVE命令用于删除节点或关系的标签与删除节点或关系的属性

7.1.1 删除节点的属性
我们先创建一个节点并建立一定的关系
建立节点:

Create (:Basketballplayer{name:"George",Team:"Clipper",score:"89"})

删除节点的属性:

match(b:Basketballplayer{name:"George"})
remove b.Team
return b

neo4j 国内镜像 neo4j使用教程_入门_22

neo4j 国内镜像 neo4j使用教程_删除节点_23


7.1.2 remove关系的属性

step1:

建立如下关系:

create (:Singer{name:"Jay Chou"})-[:`合作`{`合作作品`:"歌曲 天地一斗"}]->(:Basketballplayer:{name:"Kobe",Team:"Lakers"})
match p= (:Singer)-[r]->(:Basketballplayer)
remove r.`合作作品`
return p

neo4j 国内镜像 neo4j使用教程_属性值_24

neo4j 国内镜像 neo4j使用教程_删除节点_25


7.1.3 删除节点的标签

基本语法:

match 节点a

remove 节点a:标签

return a

建立多属性节点m

create (m:Movie:Cinema:Picture)

删除m的Picture标签

MATCH (m:Movie) 
REMOVE m:Picture
return m

m的标签此时只有Cinema和Movie

neo4j 国内镜像 neo4j使用教程_Neo4j_26

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_27


7.2 Set语句的基本操作

Set向现有节点或关系添加新属性添加或更新属性值

7.2.1 向现有的节点添加和更新属性
创建一个节点,我们来更新他的Team属性并添加一个award属性
1.创建节点

Create (:Basketballplayer{name:"LeBron",Team:"Cavaliers",AKA:"King"})

2.改变Team属性

match(b:Basketballplayer{name:"LeBron"})
set b.Team="Heat"
return b

变更前:

neo4j 国内镜像 neo4j使用教程_删除节点_28


变更后:

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_29


3.添加award属性

match(b:Basketballplayer{name:"LeBron"})
set b.award="3 chmpions"
return b

neo4j 国内镜像 neo4j使用教程_Neo4j_30


7.2.2 向现有的关系添加和更新属性

已建立队友关系,添加关系属性-发生的时间,修改关系-共属的团队

1.建立关系

match(r1:Rapper{name:"Buzzy"}),(r2:Rapper{name:"KeyNG"})
create(r1) -[:`队友`{`共属的团队`:"Walkingdead"}]->(r2)

2.添加属性

match p=(:Rapper{name:"Buzzy"})-[r]->(:Rapper{name:"KeyNG"})
set r.`时间`="2018年夏"
return p

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_31


3.更改属性

match p=(:Rapper{name:"Buzzy"})-[r]->(:Rapper{name:"KeyNG"})
set r.`共属的团队`="Wokenday"
return p

neo4j 国内镜像 neo4j使用教程_删除节点_32

Part 8:Sorting排序

如果有多个节点的标签和属性是一样的,那么我们在检索节点属性的时候要是不加限制就会得到所有节点的这个属性。

ORDER BY子句 Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。我们可以按升序或降序对行进行排序。
默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

match(b:Basketballplayer)
return b.name,b.Team,b.score

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_33


由于输出的几个节点数据排序紊乱,顾可以用排序语句进行排序(默认降序)

match(b:Basketballplayer) 
return b.name,b.Team,b.score
order by b.score

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_34

Part 9:Limit&skip语句

9.1 Limit语句的用法
LIMIT子句Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。
它修剪CQL查询结果集底部的结果。
(return出列表的上端)

limit 数字

具体例子:
如果不加limit会全部返回
加上limit的限制之后呢,就只会返回前2条记录

match(b:Basketballplayer) 
return b.name,b.Team,b.score

neo4j 国内镜像 neo4j使用教程_Neo4j_35

match(b:Basketballplayer) 
return b.name,b.Team,b.score
limit 2

neo4j 国内镜像 neo4j使用教程_入门_36


9.2 Skip语句的用法

skip和limit的用法相同,也是用在return语句之后直接加所需记录的个数

skip的作用呢就是忽略前几行,从而可以实现咱们想要的显示后几行的功能~

SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。

(return语句的下端)

match(b:Basketballplayer) 
return b.name,b.Team,b.score
skip 1

不加skip

neo4j 国内镜像 neo4j使用教程_neo4j 国内镜像_37

skip 1

neo4j 国内镜像 neo4j使用教程_删除节点_38

Part 10:merge–创建新节点

MERGE命令的作用:
创建节点,关系和属性为从数据库检索数据

MERGE命令是CREATE命令和MATCH命令的组合。
可理解为:MERGE = CREATE + MATCH
解释:MERGE命令在图中搜索给定模式,如果存在,则返回结果;
如果它不存在于图中,则它创建新的节点/关系并返回结果。

create可以创建相同节点,但是merge不能创建相同节点。

MERGE语法:

MERGE (<节点或关系的名称>:<节点或关系的标签名称>
{
   <节点或关系的属性名称>:<节点或关系的属性值>
   .....
     <节点或关系的属性名称>:<节点或关系的属性值>
})

例:

merge(:Basketballplayer{name:"Love"})

可建立一个节点

neo4j 国内镜像 neo4j使用教程_删除节点_39


但是当再次重复时:

无法创立

neo4j 国内镜像 neo4j使用教程_删除节点_40


总结:merge 先进行match,若成功match到,则不进行创建;反之则创建新的节点