【Neo4j入门】Neo4j介绍

本文介绍了图数据库Neo4j的基本概念,包括图数据库的定义和环境搭建步骤。重点讲解了Neo4j的Cypher查询语言,包括创建节点、关系,查询、更新和删除操作,以及常用的Cypher命令和函数。此外,还介绍了如何使用neo4j-admin进行数据库的备份和恢复。内容适合初学者了解和掌握Neo4j图数据库的基础操作。
摘要由CSDN通过智能技术生成


声明:仅作为自己笔记的记录,不带任何商用价值,出处链接如下
B站视频链接: https://www.bilibili.com/video/BV1Hb4y1a7Nb?spm_id_from=333.880.my_history.page.click.

1 图数据库neo4j介绍

1.1 什么是图数据库

图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据。

2 环境搭建

下载地址:链接: https://neo4j.com/downlosd-center/
安装方式:Neo4j Community Server(社区版)

2.1 安装

jdk8可以下载Neo4j Community Edition 3.5.28

2.2 使用

1.数据导入
.csv格式的文件导入到目录文件下的import中
2.neo4j的打开
在目录文件下的bin文件夹路径显示那里输入‘cmd’打开命令窗口->输入’neo4j console’回车,运行->复制网址到浏览器打开

3 Neo4j-CQL使用

3.1Neo4j-CQL简介

Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。

  • 它是Neo4j图形数据库的查询语言
  • 是一种声明性模式匹配语言
  • 遵循SQL语法
  • 语法非常简单且人性化、可读的格式
CQL命令用法
create创建节点,关系和属性
match检索有关节点,关系和属性数据
return返回查询结果
where提供条件过滤检索文件
delete删除节点和关系
remove删除节点和关系的属性
order by排序检索数据
set添加或更新标签

使用cypher语言来描述关系
eg: (fox)<-[:knows]-(周瑜)-[:knows]->(诸葛)-[:knows]->(fox)

3.2常用命令

load csv

导入csv到neo4j

//将csv拷贝到%NEO4J_HOME%\import目录
load csv from "file:///西游记.csv" as line
create(:西游{name:line[0],tail:line[1],label:line[3]})

load csv from “file:///西游记.csv” as line
create(:xiyouRelation{from:line[1],relation:line[3],to:line[0]})

lmatch p=(:person{name:‘孙悟空’})-[r:xiyouRelation]->() return p

load csv from ‘file:///人物.csv’ as line
create(:person{name:line[0]})
//查询人物
match (n:‘person’ {name:‘孙悟空’}) return n
//或者返回id
match (n:person {name:‘孙悟空’}) return n.name,id(n)
//通过where方式寻找
match (n:person ) where n.name=‘孙悟空’
return n.name,id(n)

create创建

创建模型语句用来创建数据模型

创建节点
//创建简单节点
create(n)
//创建多个节点
create(n),(m)
//创建带标签和属性的节点并返回节点
create(n:person{name:'如来'})   return n

Create(:student{name:”小红”}),(:student{name:”小明”})
create (:student{name:“小兰”}),(:student{name:“小路”})

创建关系
  • 单向关系
  • 双向关系
//使用新节点创建关系
create(n:person {name:'杨戬'})-[r:师傅]->(m:person {name:'玉鼎真人'}) 
return type(r)

//使用已知节点创建带属性的关系
match(n:person {name:'沙僧'}),(m:person{name:'唐僧'})
create (n)-[r:'师傅'{relation:'师傅'}]->(m)
return r
//检索关系节点的详细信息
match (n:person)-[r]-(m:person)
return n,m

//找到相互间的关系
match (n:person {name:‘孙悟空’}),(m:xiyouRelation) where m.from=‘孙悟空’
return n.name,m.relation,m.to
//建立关系
match (n:person {name:‘孙悟空’}),(m:xiyouRelation),(s:person) where m.from=‘孙悟空’ and m.to=s.name
create (n)-[:西游人物关系{relation:m.relation}]->(s)
return n.name,m.relation,s.name

match (n:person {name:‘沙僧’}),(m:xiyouRelation),(s:person) where
m.from=n.name and m.to=s.name create
(n)-[:西游关系{relation:m.relation}]->(s)
return n.name,m.relation,s.name

//使用新节点创建关系 ,创建关系时需要先找到节点
match(n:student{name:“小明”}),(m:student{name:“小红”})
create (n)-[r:同学{relation:“同学”}]->(m)
//或者 create (n)-[r:同学]->(m)
return n.name,type( r ),m.name

创建全路径
create p=(:person{name:'蛟魔王'})-[:义兄]->(:person{name:'牛魔王'})<-[:义兄]-(:person{name:'鹏魔王'})
return p

match查询

  • 从数据库中获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据
//查询全部结点
match (n:'西游')  return n 

//全部节点的关系
match p=()-[r:西游关系]->() return p
//指定节点的关系
match p=(:person{name:‘孙悟空’})-[r:西游关系]->() return p

//得到所有节点
match(n:“节点名”) return n
//某个指定节点
match(n:person{name:‘孙悟空’})return n.name,id(n)
//或者
match(n:person)where n.name=‘孙悟空’ return n.name,id(n)

return返回

  • 检索结点的某些或者所有属性
  • 检索结点和关联关系的某些或者所有属性
match (n:person) return id(n),n.name,n.tail,n.relation

where 子句

-过滤match查询的结果

match(n:person) where n.name='小兰' or n.name='小红' return n
#创建关系
math (n:person),(m:person) where n.name='小兰' and m.name='小红'
create(n)-[r:同学]->(m) return n.name,type(r),m.name

delete删除

  • 删除结点
  • 删除结点及相关结点和关系
# 删除关系  
match(n:student{name:"小张"})<-[r]-(m) delete r return type(r)
#删除节点 (节点不存在关系)
match(n:person{name"小张"}) delete n

remove

  • 删除结点或关系的标签、属性
#删除属性
match(n:role{name:"fox"}) remove n.age return n
#创建结点
create(m:role:person{name:"fox1"})
#删除标签
match(m:role:person{name:"fox1"})remove m:person return m

match(n:person{name:“小兰”})remove n:person return n

set 添加属性

  • 给现有结点或关系添加新属性
  • 添加或更新属性值
match(n:student{name"小红"})set n.age=18,n.sex='女'return n

order by

  • 排序操作,默认升序,降序使用desc子句
match(n:person) return id(n),n.name order by id(n) desc

union子句

  • union
    • 将两组结果中的公共行组合并返回一组结果中。不是从两个节点返回重复的行。
    • 限制:结果列类型和来自两组结果的名称必须匹配,即列名称应该相同,列的数据类型应该相同
  • union all
    • 结合并返回两个结果集的所有行成一个单一的结果集,还返回由两个结点重复行
    • 限制:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该相同,列的数据类型应该相同
match(n:role)return n.name as name
union
match(m:person)return m.name as name

match(n:role)return n.name as name
union all
match(m:person)return m.name as name

limit和skip子句

  • 过滤或限制查询返回的行数
  • limit返回前几行,skip忽略前几行
#前两行
match(n:person)return n limit 2
#忽略前两行
match(n:person)return n skip 2

null值

  • 空值视为对节点或关系的属性的缺失值或未定义值
  • 创建一个具有现有结点标签名称但未指定其属性值的结点时,它将创建一个具有null属性值的新结点
match(n:person)where n.label is null return id(n),n.name,n.tail,n.label

in操作符

  • 为CQL命令提供值的集合
match(n:person)where n.name in ['小兰','小红'] return id(n),n.name,n.tail,n.label

index索引

  • 支持结点或关系属性上的索引
  • 可以为相同标签名称的所有结点的属性创建索引
  • 可以在match或where或in运算符上使用这些索引改进CQL Command的执行
  • create index 创建索引
  • drop index丢弃索引
#创建索引
create index on :'西游'(name)
#删除索引
drop index on:'西游'(name)

unique 约束

  • CQL CREAT命令时钟创建新的结点或关系,这意味着即使使用相同的值,也会插入一个新行。
  • 支持对node或relationship的属性的unique约束
  • 避免重复
  • 强制执行数据完整性规则
#创建唯一约束
create constraint on(n:xiyou)assert n.name is unique
#删除唯一约束
drop constraint on(n:xiyou)assert n.name is unique

distinct

  • 返回所有不同值
match(n:'西游')return distinct(n.name)

3.3 常用函数

字符串函数

功能描述
upper所有字母大写
lower所有字母小写
substring获取给定string的子字符串
replace替换一个字符串的子字符串

match (e) return id(e),e.name,substring(e.name,0,2)

aggregation聚合

match(e) return count(e)

关系函数

功能描述
startnode获取关系的开始结点
endnode获取关系的结束结点
id获取关系的id
type获取字符串表示中的一个关系的type

match(a)-[r]->(b) return id®,type®

3.4 neo4j-admin使用

cmd下neo4j目录下输入一下命令

数据库备份

对neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j

cd %NEO4J_HOME%/bin
#关闭neo4j   一定要先neo4j install-service,才可以执行neo4j stop
neo4j stop
#备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump

数据库恢复

还原、迁移之前,要关闭neo4j服务

#数据导入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db --force
#重启服务
neo4j start
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值