Neo4j学习笔记

本文介绍了Neo4j图形数据库的环境配置,包括JDK的安装和Neo4j的下载、解压、配置与启动。然后详细讲解了Cypher命令,如创建节点、关系,查询、删除、修改等操作,以及批量导入数据、排序、限制和跳过等高级功能。此外,还提到了数据库的备份和恢复方法。
摘要由CSDN通过智能技术生成

Neo4j 学习笔记/入门使用

By 一只壹吾鱼

  • 最近这段时间在学习neo4j,顺带整理了一下基本的Cypher命令语句,供参考

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\binneo4j 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
念念不忘,必有回响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值