Neo4j图数据库学习第二章基本概念和典型例子.docx
- 文档编号:8838538
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:729.03KB
Neo4j图数据库学习第二章基本概念和典型例子.docx
《Neo4j图数据库学习第二章基本概念和典型例子.docx》由会员分享,可在线阅读,更多相关《Neo4j图数据库学习第二章基本概念和典型例子.docx(12页珍藏版)》请在冰豆网上搜索。
Neo4j图数据库学习第二章基本概念和典型例子
第1章
Neo4j基本概念与入门实例
●Neo4j图数据中基本元素与概念
●官方入门实例简介
1.1Neo4j图数据中基本元素与概念
1.1.1节点
节点(Node)是图数据库中的一个基本元素,用以表示一个实体记录,就像关系数据库中的一条记录一样。
在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。
1.1.2关系
关系(Relationship)同样是图数据库中的基本元素。
当数据库中已经存在节点后,需要将节点连接起来构成图。
关系就是用来连接两个节点,关系也称为图论的边(Edge),其始端和末端都必须是节点,关系不能指向空也不能从空发起。
关系和节点一样可以包含多个属性,但关系只能有一个类型(Type),
图1-1带有类型和属性的关系
图1-2多个关系指向同一节点
关系必须有开始节点(Startnode)和结束节点(Endnode),两头都不能为空。
图1-3关系的起始节点和结束节点
节点可以被关系串联或并联起来,由于关系可以是有方向的,所以我们可以在由节点、关系组成的图中进行遍历操作。
图1-4关系串联节点
图1-5关系并联节点
在图的遍历操作中我们可以指定关系遍历的方向或者指定为无方向,因此在创建关系时不必为两个节点创建相互指向的关系,而是在遍历时不指定遍历方向即可。
这样在遍历时不指定方向即可。
特别注意一个节点可以存在指向自己的关系:
图1-6关系的起始、结束节点为同一节点
图1-7
1.1.3属性
类型
说明
取值范围
boolean
布尔值
true或false
byte
8位的整数
-128到127,inclusive
short
16位的整数
-32768到32767,inclusive
int
32位的整数
-2147483648到2147483647,inclusive
long
64位的整数
-9223372036854775808到9223372036854775807,inclusive
float
32位IEEE754标准浮点数
/
double
64位IEEE754标准浮点数
/
char
16位无符号整数代表的字符
u0000到uffff(0to65535)
string
Unicode字符序列
/
1.1.4路径
当使用节点和关系创建了一个图后,在此图中任意两个节点间都是可能存在路径的。
图中任意两节点都存在由节点和关系组成的路径,路径也有长度的概念,也就是路径中关系的条数。
图1-1路径
当然也可以说单独一个节点就可以组成长度为0的路径:
图1-2长度为0的路径
如果是两个简单的节点,中间只存在一条关系,那这条路径的长度就是1:
图1-3长度为1的路径
1.1.5遍历(Traversal)
遍历一张图就是按照一定的规则,根据它们之间的关系,依次访问所有相关联的节点的操作。
1.2官方入门实例介绍
为了方便读者入门,Neo4jWeb管理界面提供了一个官方入门实例“电影关系图”帮助初学者在自己电脑上一步步创建一个入门级别的图数据结构。
本节将围绕这个“电影关系图”实例一步步讲解、分析其创建和查询等操作。
图1-1Neo4jWeb管理界面
这个实例将指引读者学习以下入门操作:
(1)创建图数据:
将电影、演员、导演等图数据导入到Neo4j数据库中。
(2)检索节点:
检索特定电影和演员。
(3)查询关系:
发现相关的演员和导演。
(4)查询关系路径:
查询他们之间的关系路径。
1.2.2创建图数据
【程序2-38】创建电影节点
CREATE(TheMatrix:
Movie{title:
'TheMatrix',released:
1999,tagline:
'WelcometotheRealWorld'})
上面Cypher语句运行后将会在我们的数据库中创建一个Movie节点,在数据库中的存储形态如下图所示:
【程序】创建人物节点
CREATE(Keanu:
Person{name:
'KeanuReeves',born:
1964})
上面代码使用CREATE指令创建了一个Person节点,节点带有两个属性{name:
'KeanuReeves',born:
1964}。
在后续的6行代码中都使用了同样的CREATE指令分别创建了人物:
Carrie、Laurence、Hugo、LillyW、LanaW和JoelS。
【程序2-39】创建演员、导演关系
CREATE
(Keanu)-[:
ACTED_IN{roles:
['Neo']}]->(TheMatrix),
(Carrie)-[:
ACTED_IN{roles:
['Trinity']}]->(TheMatrix),
(Laurence)-[:
ACTED_IN{roles:
['Morpheus']}]->(TheMatrix),
(Hugo)-[:
ACTED_IN{roles:
['AgentSmith']}]->(TheMatrix),
(LillyW)-[:
DIRECTED]->(TheMatrix),
(LanaW)-[:
DIRECTED]->(TheMatrix),
(JoelS)-[:
PRODUCED]->(TheMatrix)
上面的指令运行完后,数据库中会有以下存储形态:
1.2.3检索节点
图数据结构创建完毕后,在本节中我们将要了解检索节点的相关操作。
1.2.3.1查找人员
【程序2-44】查找名为“TomHanks”的人物
MATCH(tom{name:
"TomHanks"})RETURNtom
上面指令使用MATCH指令查找匹配条件:
{name:
"TomHanks"}的节点,执行的结果为:
图1-1查找到的节点
我们可以在结果显示区看到查询到的节点,注意在结果展示区点击节点图标,会查看到节点的属性。
1.2.3.2查找电影节点
【程序2-45】查找名为“CloudAtlas”的电影
MATCH(cloudAtlas{title:
"CloudAtlas"})RETURNcloudAtlas
上面指令查找匹配条件{title:
"CloudAtlas"}的节点,返回结果为:
图1-1查找到的节点
1.2.3.3随机查找多个人物的人名
【程序2-46】随机查找10个人物的人名
MATCH(people:
Person)RETURNpeople.nameLIMIT10
上面指令查找10个Person节点,然后返回每个节点的name属性,返回结果为:
图1-1name属性列表
1.2.3.4查找多个电影
【程序2-47】查找1990年到2000年发行的电影的名称
MATCH(nineties:
Movie)
WHEREnineties.released>1990ANDnineties.released<2000
RETURNnineties.title
返回结果为:
图1-1title属性列表
图1-2
1.2.4查询关系
下面拓展MATCH指令的使用。
1.2.4.1查找演员参演的电影
【程序2-48】查找"TomHanks"参演过的电影的名称
MATCH(tom:
Person{name:
"TomHanks"})-[:
ACTED_IN]->(tomHanksMovies)RETURNtom,tomHanksMovies
返回结果为:
图1-1"TomHanks"参演过的电影
通过结果可以看到演员TomHanks参演过的所有电影。
【程序2-49】查找谁导演了电影“CloudAtlas”
MATCH(cloudAtlas{title:
"CloudAtlas"})<-[:
DIRECTED]-(directors)RETURNdirectors.name
返回结果为:
图1-2电影“CloudAtlas”的导演名单
【程序2-50】查找与“TomHanks”同出演过电影的人
MATCH(tom:
Person{name:
"TomHanks"})-[:
ACTED_IN]->(m)<-[:
ACTED_IN]-(coActors)RETURNcoActors.name
返回结果为:
图1-3与“TomHanks”同出演过电影的人
【程序2-51】查找与电影“CloudAtlas”相关的所有人
MATCH(people:
Person)-[relatedTo]-(:
Movie{title:
"CloudAtlas"})RETURNpeople.name,Type(relatedTo),relatedTo
返回结果为:
图1-4与电影“CloudAtlas”相关的所有人
图1-5
1.2.5查询关系路径
【程序2-52】查找与演员“KevinBacon”存在4条及以内关系的任何演员和电影
MATCH(bacon:
Person{name:
"KevinBacon"})-[*1..4]-(hollywood)
RETURNDISTINCThollywood
返回结果为:
图1-1与演员“KevinBacon”存在4条及以内关系的演员和电影
【程序2-53】查找与演员“KevinBacon”与“MegRyan”之间的最短关系路径
MATCHp=shortestPath(
(bacon:
Person{name:
"KevinBacon"})-[*]-(meg:
Person{name:
"MegRyan"})
)
RETURNp
返回结果为:
图1-2“KevinBacon”与“MegRyan”之间的最短关系路径
1.2.6思考与练习
【程序2-54】查找没有与TomHanks合作过的演员
MATCH(tom:
Person{name:
"TomHanks"})-[:
ACTED_IN]->(m)<-[:
ACTED_IN]-(coActors),
(coActors)-[:
ACTED_IN]->(m2)<-[:
ACTED_IN]-(cocoActors)
WHERENOT(tom)-[:
ACTED_IN]->(m2)
RETURNcocoActors.nameASRecommended,count(*)ASStrengthORDERBYStrengthDESC
结果为:
图1-1没有与TomHanks合作过的演员
【程序2-55】找人将TomHanks介绍给TomCruise
MATCH(tom:
Person{name:
"TomHanks"})-[:
ACTED_IN]->(m)<-[:
ACTED_IN]-(coActors),
(coActors)-[:
ACTED_IN]->(m2)<-[:
ACTED_IN]-(cruise:
Person{name:
"TomCruise"})
RETURNtom,m,coActors,m2,cruise
结果为:
图1-2找人将TomHanks介绍给TomCruise
1.2.7清空数据库
【程序2-56】清空所有Person、Movie节点及其所有关系
MATCH(a:
Person),(m:
Movie)OPTIONALMATCH(a)-[r1]-(),(m)-[r2]-()DELETEa,r1,m,r2
【程序2-57】查询任意数据
MATCH(n)RETURNn
如果没有,就说明已经删除成功了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Neo4j 数据库 学习 第二 基本概念 典型 例子