官方文档:https://neo4j.com/docs/

一、认识neo4j

1.1 了解数据

看下在neo4j上查询出的数据是怎样的,点击左侧的四个tab可切换不同形式的数据呈现方式

  • Graph:以图形展示数据在这里插入图片描述

  • Table:以json形式呈现数据
    在这里插入图片描述

  • Text和Code就不截图了,和Table看起来差不多

1.2 一些基本概念

  • 节点
    在Graph中,一个小圆点就是一个节点
    可以将标签理解为类,节点理解为类实例化的对象

  • 标签
    标识节点属于什么类别,一个节点可以有多个标签,不同类型的标签在Graph中会以不同颜色呈现;
    在Graph中,点击节点,看到的这个带圆角背景的,就是节点的标签:
    在这里插入图片描述
    在Table视图中,以labels字段表示标签:
    在这里插入图片描述

  • 关系
    在Graph中的灰色连线就是两个节点间的关系,连线上的文字是关系的类型(点击关系 可查看其属性),箭头表示关系方向;
    两个节点之间可以有多种关系,有多少类型的关系就有多少条线进行连接
    在这里插入图片描述

  • 属性
    节点和关系都能带多个属性

  • 类型
    标识关系类型的

  • 路径
    A节点到B节点,经历的关系和节点就是A到B的路径
    A到B之间经历的关系的层数,为路径的长度

二、常用CQL语法及示例

2.1 增

2.1.1 CREATE

  • 创建节点

语法:

CREATE (:标签<:标签…> {节点属性})

示例:

create
(a:西游记:西天取经组合:人 {name:“唐僧”,skills:[“百分百被抓”,“紧箍咒”,“碎碎念”]}),
(b:西游记:西天取经组合:马:龙 {name:“白龙马”,skills:[“龙马来回变”]}),
(c:西游记:西天取经组合:猴子{name:“孙悟空”,skills:[“打妖怪”]}),
(d:西游记:西天取经组合:猪{name:“猪八戒”,skills:[“吃”]}),
(e:西游记:西天取经组合:人{name:“沙僧”,skills:[“扛行李”]})
return a,b,c,d,e

在这里插入图片描述

  • 创建关系

语法:

CREATE (节点1) -[:关系类型 {关系属性}]-> (节点2)

示例:

match
(a {name:“唐僧”}),
(b {name:“白龙马”}),
(c {name:“孙悟空”}),
(d {name:“猪八戒”}),
(e {name:“沙僧”})
create
(a) -[r1:师徒 {sort:1}]-> (c),
(a) -[r2:师徒 {sort:2}]-> (d),
(a) -[r3:师徒 {sort:3}]-> (e),
(a) -[r4:师徒 {sort:4}]-> (b)
return a,b,c,d,e

在这里插入图片描述

  • 创建索引

语法:

CREATE INDEX ON :标签名(属性)

示例:

create index on :西游记(name)

:schem 可查看创建的索引和约束

  • 创建唯一约束

语法:

CREATE CONSTRAINT ON (变量名:标签) ASSERT 变量名.属性 IS UNIQUE

示例:

create constraint xy_name_unique on (m:西天取经组合)
assert m.name is unique

2.1.2 MERGE

  • MERGE

不存在则新增,已存在则不进行任何操作
语法:把CREATE改成MERGE即可

  • MERGE ON CREATE

如果目标不存在(本次操作是新增的),则进行MERGE后,还要执行ON CREATE之后的操作
语法:

MERGE XXX
ON CREATE
需要进行的额外操作

示例:

merge (m:人 {name:“张三”})
on create
set m.operation = ‘新增’

  • MERGE ON MATCH

如果目标已存在(本次操作没有新增),则进行MERGE后,还要执行ON MATCH之后的操作
语法:

MERGE XXX
ON MATCH
需要进行的额外操作

示例:

merge (m:人 {name:“张三”})
on create
set m.operation = ‘新增’
on match
set m.operation = ‘更新’
return m

2.2 查

2.2.1 MATCH

条件筛选有两种形式,不带where和带where
示例:查找唐僧

match
(a {name:“唐僧”})
return a

match
(a)
where a.name=“唐僧”
return a

2.2.2 OPTIONAL MATCH

match和optional match的区别在于:match没查到就啥也不返回,optional match会返回null

match示例: 在这里插入图片描述
optional match示例:
在这里插入图片描述

2.2.3 ORDER

与SQL一样,ORDER BY XX ASC/DESC
order需要在return之后,否则会报错
示例:

match(n:西天取经组合)
return n
order by n.name

2.2.4 SKIP LIMIT

和mysql中的limit offset效果一样,不过neo4j中 skip需要在limit之前(如果有同时用skip和limit)
示例:

match(n:人)
return n
order by n.name desc
limit 10 skip 10

2.2.5 UNION

同sql一样,支持UNION和UNION ALL
neo4j中,被UNION连接的对象需要设置相同的别名,否则会报语法错误
示例:

match (n {name:“白龙马”})
return n.name as name
UNION ALL
match (m {name:“白龙马”})
return m.name as name

2.2.6 数据筛选

  • 精准查找

2.2.1的示例,就是精确查找

  • 正则匹配

neo4j支持正则匹配,以=~表示正则匹配
示例:

match
(a)
where a.name=~".+僧"
return a

  • 其他

neo4j还支持CONTAINS、IN之类的筛选,想了解更多可以看看官方文档

2.2.7 跨关系查询(指定路径长度)

语法:

match (a) -[:关系*m…n]- (b)

*m…n表示跨m~n层关系,*m表示跨m层关系
示例1:查找与孙悟空有跨任意两层关系的节点

match
(n {name:“孙悟空”}) -[*2]-(m)
return m,n

示例2:查找与孙悟空有跨1或2层师兄弟关系的节点

match
(n {name:“孙悟空”}) -[:师兄弟*1…2]-(m)
return m,n

2.3 改

2.3.1 SET

  • 修改属性

示例:

match
(a {name:“唐僧”})
set a.name=“唐三藏”
return a

  • 添加新标签

示例:

match (a {name:“唐三藏”})
set a:光头
return a

在这里插入图片描述

  • 修改标签

示例:

match (n {name:“光头强”})
remove n:大头
set n:光头
return n

在这里插入图片描述
在这里插入图片描述

2.4 删

2.4.1 REMOVE

  • 删除属性

示例:

match (n {name:“白龙马”})
remove n.skills
return n

  • 删除标签

示例:

match (n {name:“孙悟空”})
remove n:猴子
return n

2.4.2 DELETE

  • 删除节点

示例:

match (n {name:“光头强”})
delete n

  • 删除关系

示例:

match
(n {name:“唐三藏”}) -[r]-(m {name:“孙悟空”})
delete r
return m,n

在这里插入图片描述

2.4.3 DETACH DELETE

  • 删除节点及与其相关的所有关系

使用delete删除节点时,如果该节点与其他节点有关系,是无法删掉的,可使用DETACH DELETE删除节点及与其相关的所有关系
示例:

match
(n {name:“唐三藏”})
detach delete n

2.4.4 DROP

  • 删除索引

示例:

drop index on :西游记(name)

更多推荐