Neo4j 学习笔记/入门使用
By 一只壹吾鱼
- 最近这段时间在学习neo4j,顺带整理了一下基本的Cypher命令语句,供参考
文章目录
- 1. 环境配置
- 2.常用命令操作
- 3. 常用函数
- 4. neo4j-admin使用
1. 环境配置
1.1 jdk的配置
- 安装好jdk11
1.2 neo4j的配置
1.2.1 neo4j的官网下载社区版
最新4.0版本以上的JDK最好为适配为jdk11,3.0版本的适合jdk8
问题:遇到下载后的压缩包想要迁移位置,显示无法复制或者粘贴,需要以管理员的身份运行一下360压缩包.exe这个操作就行,然后再进行复制粘贴或者解压都没有问题了。
1.2.2 neo4j环境部署
1.2.2.1 压缩包选好路径进行解压
1.2.2.2 新建系统变量
我的电脑–右键–属性–高级系统设置–环境变量–新建系统变量
变量名:NEO4J_HOME
变量值:Neo4j解压后存放的位置,我的是:D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10
1.2.2.3 编辑环境变量
我的电脑–右键–属性–高级系统设置–环境变量–选中path–编辑–新建–增加%NEO4J_HOME%bin(因为怕不成功,可以写完整的绝对路径D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10\bin)
其次还需要保证有PowerShell这一项↓
1.2.3 运行neo4j
使用win+R键输入cmd回车进入DOS界面,转到neo4j安装目录下的bin文件夹:
再输入启动命令:neo4j console
-
windows+R→cmd→
cd /d d:
→cd D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10\bin
→neo4j console
-
进入浏览器网址:http://localhost:7474/
-
使用的是neo4j默认数据库
1.2.4 打开Neo4j集成的浏览器
http://localhost:7474/
可以修改密码
2.常用命令操作
2.2.1 CQL简介
1、它是Neo4j图形数据库的查询语言。
2、它是一种声明性模式匹配语言
3、它遵循SQL语法。
4、它的语法是非常简单且人性化、可读的格式。
CQL命令 | 用法 |
---|---|
create | 创建节点,关系和属性 |
match | 检索有关节点,关系和属性数据 |
return | 返回查询结果 |
where | 提供条件过滤检索数据 |
delete | 删除节点和关系 |
remove | 删除节点和关系的属性 |
order by | 排序检索数据 |
set | 添加或者更新标签 |
比如,“(fox) < -[:knows]-(周瑜)-[:knows]->(诸葛)-[:knows]->(fox)”
( ) 表示节点
fox 表示节点的属性
[ ] 表示关系
:knows 表示关系的属性
–>表示关系的走向
2.2.2 load csv批量创建节点
- 快捷键:
① 在输入框中shift+enter为换行输入,enter键/点击蓝色小三角形为执行操作
② Ctrl or Shift + scroll(鼠标中轮滚动)控制面板放大/缩小
load csv from "file:///honglou.csv" as line
create (:honglouRelation {from:line[1],relation:line[3],to:line[0]})
load csv from "file:///person.csv" as line
create (:person {name:line[0]})
- 可看到生成的关系节点
问题:如果看到节点里面是空白没有数据/显示的是数字(即id号),想要显示文字。这是因为节点有多个属性,系统不知道要显示哪个,解决办法就是点击右边的收缩框,再点击person标签,选择想要显示的属性值就行。
2.2.3 create创建节点
2.2.3.1 创建一个节点
# 创建一个节点
create (n)
e.g.创建一个标签为student的节点 create (:student)
2.2.3.2 创建多个节点
# 创建多个节点
create (m),(n)
e.g. create (:student),(:teacher)
2.2.3.3 创建带有标签和属性的节点并返回节点
# 创建带有标签和属性的节点并返回节点
create (n:student {name:"小李"}) return n
2.2.3.4 创建多个标签的节点
create (:student1:teacher1 {name:"coco"})
# 或者
create (n:student1:teacher1 {name:"Tom"})
2.2.4 create创建关系
Neo4j图数据库遵循属性图模型来存储和管理其数据。 根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。 基于方向性,Neo4j关系被分为两种主要类型:单向关系和双向关系。
2.2.4.1 使用新节点创建关系
# 1、使用新节点创建关系
create (m:t_stu {name:"小君"})-[r:老师]->(n:t_stu {name:"冯老师"}) return type(r)
问题:用这个语句新建立了两个标签student1和teacher,这两个标签的两个节点之间又建立了联系,很明显不是我们想要的(想要在同一个标签里面的两个节点建立关系);接着用命令:
match (m:student1) delete m
删掉是会报错提示说“两个标签的节点之间还存在联系,需要先将节点间关系删除”,所以再用命令:match (m:student1 {name:"小桐"})-[r]->(n) delete r
将其关系成功删除
- 问题:不知道是不是neo4j是最新版4.0以上版本的缘故,看别人教程笔记里面写着
create (m:t_stu {name:"小君"})-[r:"老师"]->(n:t_stu {name:"冯老师"}) return type(r)
中间的关系r:"老师"
这里是有双引号的,但是这里最新版的加上去就会报错,去掉就没问题了。
2.2.4.2 使用已知节点创建带属性的关系
# 2、使用已知节点创建带属性的关系
match (n:student {name:"小李"}),(m:student {name:"小吴"}) create (n)-[r:同桌]->(m) return r
# 或者关系中带上``这种类似单引号的引号也可以,就在数字键盘1的左边,英文状态下
match (n:student {name:"小李"}),(m:student {name:"小吴"}) create (n)-[r:`同桌`]->(m) return r
2.2.4.3 检索关系节点的详细信息
# 3、检索关系节点的详细信息
match (n:student)-[r]->(m:student) return n,m
2.2.4.4 创建全路径
# 4、创建全路径
create p=(:student{name:"小赵"})-[:后桌]->(:student{name:"小李"})<-[:前桌]-(:student{name:"小迪"}) return p
点击student标签,此小李非彼小李,id不同
2.2.5 match查询
# Neo4j CQL MATCH命令用于:
# 1、从数据库获取有关节点和属性的数据;
# 2、从数据库获取有关节点,关系和属性的数据。
match (n:student) return n limit 25
match (n:student {name:"小赵"}) return n
# 或者
match (n:student) where n.name="小赵" return n.name
查询自动生成的id
match (n:formal) where id(n)=2124 return n
2.2.6 return返回
# Neo4j CQL RETURN 子句用于
# ·检索节点的某些属性
# ·检索节点的所有属性
# ·检索节点和关联关系的某些属性
# ·检索节点和关联关系的所有属性
match (n:student) return id(n),n.name
2.2.7 where子句
# 像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。
match (n:student) where n.name="小李" or n.name="小赵" return n
# 创建关系(已存在的节点)
match (n:student),(m:student) where n.name="小赵" and m.name="小吴" create (n)-[r:邻居]->(m) return n.name,type(r),m.name
2.2.8 delete删除
# 删除节点(前提:节点不存在关系!!!)
match (n:student{name:"小张"}) delete n
# 删除关系(存在关系的节点想要删除必须先删除其关系)
match (n:student{name:"小赵"})<-[r]-(m) delete r return type(r)
# 删除由两个标签建立的关系以及节点都会被删掉(delete p这里是关键)
MATCH p=(n:person{name:"贾宝玉"})-[r:`关系`]->(m) delete p return type(r)
# 删除某个节点的某个关系
match (n:person{name:"贾宝玉"})-[r:`关系`]-() delete r
参考:Neo4j删除节点和关系、彻底删除节点标签名 - 走看看 (zoukankan.com)
2.2.9 remove删除
2.2.9.1 删除属性
# 删除属性
match (n:student {name:"小吴"}) remove n.age return
2.2.9.2 删除标签
# 删除标签
match (m:student1:teacher1 {name:"coco"}) remove m:teacher1 return m
↑前后↓对比
2.2.10 set子句
有时,我们需要向现有的节点或关系添加新属性。要做到这一点,Neo4j CQL提供了一个set子句。
- 向现有节点或关系添加新属性
- 添加或更新属性值
match (n:student {name:"小赵"}) set n.age=18 return n
修改标签的名称或者关系
图数据库neo4j中修改标签和关系 - 知乎 (zhihu.com)
比如把标签为“jiegou”的修改成标签为“结构”
match(n:jiegou) remove n:jiegou set n:结构
2.3.11 order by排序
Neo4j CQL在match命令中提供了“order by”子句,对match查询返回的结果进行排序。排序有两种顺序:升序和降序。默认情况下,按照升序进行排序。如果要进行降序排序,需要使用desc子句。
match (n:student) return id(n),n.name order by id(n) desc
2.3.12 union子句
与SQL一样,Neo4j CQL有两个子句,将两个不同结果过合并成一组结果。
2.3.12.1 union
# 它将两组结果中的公共行组合并返回到一组结果中,它不从两个节点返回重复的行。
# 限制:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
match (m:person) return m.name as name union match (n:role) return n.name as name
2.3.12.2 union all
# 它结合并返回两个结果集的所有行成一个单一的结果集。它还返回有两个节点重复行。
# 限制:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。
match (m:person) return m.name as name,"person" as p union all match (n:movie) return n.title as name,"movie" as p
2.3.13 limit 和 skip子句
Neo4j CQL已提供LIMIT
子句和SKIP
来过滤或限制查询返回的行数。
2.3.13.1 limit子句
# limit 返回前几行
match (n:student) return n limit 2
2.3.13.2 skip子句
# skip 忽略前几行
match (n:student) return n skip 2
2.3.14 null值
Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。
match (n:student) where n.sex is null return id(n),n.name
2.3.15 in操作符
与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。
match (m:student) where m.name in["小李","小赵"] return id(n),m.name
2.3.16 index索引
Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。我们可以为具有相同标签名称的所有节点的属性创建索引。可以在match或where或in运算符上使用这些索引列来改进CQL Command的执行。
# 创建索引
create index on:student (name)
# 删除索引
drop index on:student (name)
2.3.17 unique约束
在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使我们使用相同的值,它也会插入一个新行。根据我们对某些节点或关系的应用需求,我们必须避免这种重复。
像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束。
UNIQUE约束的优点
- 避免重复记录
- 强制执行数据完成性规则
# 创建唯一约束
create constraint on (m:student) assert m.name is unique
# 删除唯一约束
drop constraint on (m:student) assert m.name is unique
2.3.18 distinct关键字
用法就像SQL中的distinct关键字,返回的是所有不同值。
match (m:student) return distinct(m.name)
2.3.19 count计数
因neo4j显示有限,最多只能显示300个节点,所以可以利用代码来得到节点数
# 得到节点数
match (m:sentence) return count(m)
# 得到关系数量
match (m)-[r:`包含诗句有`]->(n) return count(r)
3. 常用函数
函数 | 用法 |
---|---|
String 字符串 | 它们用于使用String字面量 |
Aggregation 聚合 | 它们用于对CQL查询结果执行一些聚合操作 |
Relationship 关系 | 他们用于获取关系的细节,如startnode,endnode等 |
3.1 String字符串函数
与SQL一样,Neo4j CQL提供了一组String函数,用于在CQL查询中获取所需的结果。
功能 | 描述 |
---|---|
UPPER | 它用于将所有字母更改为大写字母 |
LOWER | 它用于将所有字母改为小写字母 |
SUBSTRING | 它用于获取给定String的子字符串 |
REPLACE | 它用于替换一个字符串的子字符串 |
match (n) return id(n),n.name,substring(n.name,0,2)
3.2 Aggregation聚合函数
和SQL一样,Neo4j CQL提供了一些在RETURN子句中使用的聚合函数。它类似于SQL中的GROUP BY子句。我们可以使用match命令中的return+聚合函数来处理一组节点并返回一些聚合值。
聚集功能 | 描述 |
---|---|
COUNT | 它返回由MATCH命令返回的行数 |
MAX | 它返回由MATCH命令返回的一组行的最大值 |
MIN | 它返回由MATCH命令返回的一组行的最小值 |
SUM | 它返回由MATCH命令返回的所有行的求和值 |
AVG | 它返回由MATCH命令返回的所有行的平均值 |
match (n) return count(n)
3.3 Relationship关系函数
Neo4j CQL提供了一组关系函数,以在获取开始节点、结束节点等细节时知道关系的细节。
功能 | 描述 |
---|---|
STARTNODE | 它用于知道关系的开始节点 |
ENDNODE | 它用于知道关系的结束节点 |
ID | 它用于知道关系的ID |
TYPE | 它用于知道字符串表示中的一个关系的TYPE |
match (m)-[r]->(n) return id(r),type(r)
4. neo4j-admin使用
4.1 数据库备份
对Neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j
cd %NEO4J_HOME%/bin
# 关闭neo4j
neo4j stop
# 备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump
比如:首先要在D盘下建立一个文件夹neo4j_graph_db,然后再执行命令
4.2 数据库恢复
还原、迁移之前,要关闭neo4j服务
# 数据导入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db --force
# 重启服务
neo4j start
4.3 切换数据库
(39条消息) Neo4j如何在不删除原来数据库的基础上创建新数据库和切换数据库_微莱羽墨的博客-CSDN博客
我自己的:D:\Neo4j\neo4j-community-4.4.10-windows\neo4j-community-4.4.10\conf
(41条消息) neo4j4.0.6创建新的数据库_当一颗恒星的博客-CSDN博客_neo4j创建数据库
The End
念念不忘,必有回响