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为标签,生成图如下:


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

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

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


一次创造多个节点:

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

多节点之间用Create隔离

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

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

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

创建结果如图:

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

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

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"})

创建后的结果如下:

Part3:创建关系

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

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

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

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

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

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

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

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


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

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

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

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

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

Part4:关于Match(查找)语句

基本语法:

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

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

例1:查找Pharaoh

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

查找结果如下图(因为标签为Rapper的节点很多,因此需要加上要查找节点独特的属性方能准确查找出来)
可在table里面看到其所有属性

例2:查找节点的属性
我们以查找Pharaoh的属性为例:
标示符.要查询的属性为基本语句

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


例3:查找节点的所有关系
以查找Buzzy的关系为例
查找时可缺省标示符仅用标签和节点属性进行查找

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

Part5:删除节点和关系

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

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

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


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

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


5.1.2通过id属性删除该节点

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


5.2. 删除一个节点及其所有的关系
先创建若干个临时节点与临时关系

删除代码如下:

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

删除后结果如下

5.3.删除一个标签下的所有节点与关系
代码如下,其中r为标示符,Loc为要删除标签的名称

MATCH (r:Loc)
DETACH DELETE r

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

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

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


7.1.2 remove关系的属性
step1:
建立如下关系:

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


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


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

变更前:


变更后:

3.添加award属性

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


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


3.更改属性

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

Part 8:Sorting排序

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

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

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


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

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

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

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


9.2 Skip语句的用法
skip和limit的用法相同,也是用在return语句之后直接加所需记录的个数
skip的作用呢就是忽略前几行,从而可以实现咱们想要的显示后几行的功能~
SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。
(return语句的下端)

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

不加skip

skip 1

Part 10:merge–创建新节点

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

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

MERGE语法:

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

例:

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

可建立一个节点

但是当再次重复时:
无法创立

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

Neo4j的基本操作相关推荐

  1. 图数据库neo4j的安装与基本使用(一)

    图数据库neo4j的安装与基本使用(一) 1-什么是图形数据库,什么是Neo4j 2018年06月13日 17:16:10 weixin_37681618 阅读数:233更多 个人分类: 图形数据库 ...

  2. neo4j数据库学习资料(全)

    文章目录 1. neo4j介绍 Neo4j的特点 Neo4j的优点 Neo4j的数据模型 2. neo4j安装 2.1 Windows 安装 2.1.1 安装JDK 11 (1)下载JDK安装文件 ( ...

  3. 知识图谱组队学习Task01——知识图谱介绍

    文章目录 一.知识图谱简介 二.Neo4J 1.Neo4J的安装方法 2.Neo4J的基本操作 3.通过 Python 操作 Neo4j (1)neo4j模块:执行CQL ( cypher ) 语句 ...

  4. neo4基本使用教程

    一.使用前说明 neo4j使用需要配置java环境 检查就是: java -version neo4j下载网址: https://neo4j.com/download-center/ 二.neo4j使 ...

  5. 【知识图谱】Neo4j基本操作及数据库文件导入(graph.db.dump)

    初探Neo4j 导入数据 备份数据 客户端操作 附录 All Link 请读者参考上篇博文 Neo4j安装教程 导入数据 若开启服务,先在终端停止 Neo4j 服务 ./neo4j stop 接下来, ...

  6. 【Neo4j × 知识图谱】图形化数据库基本操作: 创建节点与关系、添加属性、查询节点 | 附:可视化 构建四大名著 知识图谱(含源代码)| word2vec实战: 构造斗罗大陆人物关系

    给研究生的真诚建议(将会分篇发布) [2]躺平摆烂和emo解决不了任何问题,打起精神来,只有付出才有回报,只有主动行动 去解决问题,问题才能被解决! [3]研究生课程都集中在研一,研二(几乎)就不再上 ...

  7. 图数据库Neo4j的介绍与使用

    Neo4j 是一个高性能的 NoSQL 图形数据库,它将结构化数据存储在网络(从数学角度叫做图)上而不是表中.Neo4j 也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性. 接下来我们 ...

  8. 【MySQL】数据库基本操作、表的操作

    一.数据库 1.什么是数据库 2.数据库基本操作 2.1.显示数据库 2.2. 创建数据库 2.3.选中数据库 2.4.删除数据库 3.数据库分类 4.MySQL 安装 二.数据表的使用 1. 常用数 ...

  9. Neo4j HA环境配置

    Neo4j作为一个图数据库,其名字的由来其实与其在底层的存储方式有关,Neo4j底层会以图的方式把用户定义的节点以及关系存储起来,通过这种方式,可是高效的实现从某个节点开始,通过节点与节点间关系,找出 ...

  10. neo4j︱图数据库基本概念、操作罗列与整理(一)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

最新文章

  1. CIFS NFS SMB Samba 文件共享协议 介绍
  2. 【Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )
  3. layui tab选项卡外部html页面,layui的Tab选项卡知识
  4. cat /proc/meminfo 各字段详解
  5. Go的sync.RWMutex(六)
  6. 说明一项最有成就感的php项目,2020 Github 上 10 个最受欢迎的 PHP 项目
  7. [k8s]metricbeat的kubernetes模块kube-metric模块
  8. Spring集成Mybatis配置映射文件方法详解
  9. 梯度下降法、最速下降法
  10. 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
  11. 选择标签至文本域效果,可多选/可过滤重复/可限制个数
  12. 001 基本的环境的安装
  13. ggplot2作图详解:映射(mapping)
  14. 51nod 1526 分配笔名(字典树+贪心)
  15. 面试小题,传入6返回9,传入9返回6
  16. lc 778. Swim in Rising Water
  17. hiveSQL执行计划(explain使用全网最详细!!)
  18. 数据库大量数据操作中事务优化方案
  19. 经历 成长——致逝去的时光
  20. 外贸B2C独立站如何做?

热门文章

  1. 系列九、MongoDB聚合查询
  2. Crank数学通道绘制RPM曲线
  3. 【网络编程】TCP/IP协议(互联网的基石)
  4. xxx-job 分布式任务调度框架 使用案例
  5. Laravel 中大型项目架构
  6. 超声波震动棒用于工业清洗设备
  7. 为什么我们应该担心大型科技公司的covid跟踪计划
  8. 蓝桥杯赛题——星系炸弹
  9. 日记2014/12/30
  10. 深入解析路由与网络:网络的脉络