Neo4j3-Neo4j基础操作(中)
一、关系操作
1. 创建关系
(1) 关系模式的构成:起始节点 - [变量名:关系类型 {属性名1:属性值1,属性名2:属性值2,...,属性名n:属性值n}] -> 结束节点
(2) 在创建关系时,必须指定关系类型
(3) 关系带有方向,箭头的方向代表关系的方向
(3) 创建关系同样使用 create 子句
match (s1 {name: "张三"}), (s2 {name: "李四"})
create (s1) - [r:关系 {relationship: "朋友"}] -> (s2)
return r;
先获取要创建关系的2个节点,再创建关系
(4) 也可以边创建节点边创建关系
match (s1 {name: "张三"})
create (s1) - [r:关系 {relationship: "朋友"}] -> (s2:`人`:`学生` {name: "王五"})
return r;
2. 查询关系
关系是带方向的,查询关系使用的符号有3种:-- 代表任意方向,--> 和 <-- 分别代表箭头方向的关系
(1) 查询连接节点张三的所有关系的节点
match ({name: "张三"}) -- (n)
return n;
(2) 查询连接张三的从张三出发的所有有向关系的节点
match ({name: "张三"}) --> (n)
return n;
(3) 使用变量为关系命名,查询连接张三的所有关系的 relationship 属性,和节点的 name 属性
match ({name: "张三"}) - [r] - (n)
return n.name as name, r.relationship as relationship;
使用 as 子句可以给查询结果的列名起别名
3. 修改关系
(1) 同样是使用 set 子句,新增或修改关系的属性
match ({name: "李四"}) - [r] - ({name: "赵六"})
set r.relationship = "同学"
return r;
先获取要修改的关系,再对其进行修改操作
(2) 同样是使用 remove 子句,删除关系的属性
match ({name: "李四"}) - [r] - ({name: "赵六"})
remove r.relationship
return r;
4. 删除关系
删除关系同样是使用 delete 子句,先获取到要删除的关系,再删除即可
(1) 删除关系
match ({name: "李四"}) - [r] - ({name: "赵六"})
delete r;
(2) 删除连接节点张三的所有关系
match ({name: "张三"}) - [r] - ()
delete r;
二、路径操作
1. 路径模式
路径模式的构成:变量名 = 开始节点 边 节点 边 ... 节点 边 ... 结束节点
2. 路径匹配
(1) [*n]:两个节点间有 n 个关系
# 例如[*4]表示a和b之间有4个关系
match p = (a:人) - [*4] - (b)
return p;
(2) [*m..n]:两个节点间包含 m 到 n 个关系
# 路径包含3~5个关系
match p = (a) - [*3..5] - b
return p;# 路径包含3个及以上关系
match p = (a) - [*3..] - b
return p;# 路径包含5个及以内关系
match p = (a) - [*..5] - b
return p;
(3) [*]:两节点之间的所有关系
match p = (a) - [*] - (b)
return p;
这个查询不推荐使用,相当于全库扫描,效率特别低下,数据量稍微多一点就会很慢
三、数据类型
1. 属性类型
(1) 数值类:Integer(整数)和 Float(浮点数)
(2) 字符串:String
(3) 布尔类:Boolean
(4) 空间类:Point
(5) 时间类:Date,Time,LocalTime,DateTime,LocalDateTime 和 Duration
2. 结构类型
(1) 节点类:Node(包含 Id, Labels、Map 类型)
(2) 关系类:Relationship(包含 Id、Type、Map 类型)
(3) 路径类:Path(节点和关系的序列)
3. 组合类型
(1) 列表类:List(列表是元素的有序序列,元素可以是任意类型)
(2) 字典类:Map(由 (key, value) 对组成,key 是 字符串类型,value 可以是任意类型)
4. 类型转换
(1) toBoolean() 和 toBooleanOrNull():将字符串、整数或布尔值转换为布尔值
(2) toFloat() 和 toFloatOrNull():将整数、浮点数或字符串值转换为浮点数
(3) toInteger() 和 toIntegerOrNull():将布尔值、整数、浮点数或字符串值转换为整数值
四、常用函数
1. 标量函数
标量函数返回标量值
(1) 节点相关
# id():返回节点或关系的 id
# labels():返回节点的标签(List)
# keys():返回节点或关系的属性名(List)
# properties():返回节点或关系的属性(Map)create (p:人 {name: "小明", city: "济南"})
return id(p), labels(p), keys(p), properties(p);
(2) 关系相关
# type():返回关系的类型
# startNode():返回关系的开始节点
# endNode():返回关系的结束节点match (a) - [r] -> (b)
return type(r), startNode(r), endNode(r);
(3) 列表相关
# coalesce:返回参数列表中第一个非 null 的元素,都为空则返回 null
match (n)
return coalesce(n.age, n.name, n.sex);# head:返回列表中第一个元素
# last:返回列表中最后一个元素
# size:返回列表中元素的数量match (n)
where exists(n.nums)
return n.nums, coalesce(n.nums), head(n.nums), last(n.nums), size(n.nums);
(4) 长度相关
# size(string):表示字符串中字符的数量,可以把字符串当作是字符的列表
# size(list):返回列表中元素的数量
# size(pattern_expression):也是统计列表中元素的数量,但是不是直接传入列表,而是提供模式表达式(pattern_expression),用于在匹配查询(Match query)中提供一组新的结果,这些结果是路径列表,size()函数用于统计路径列表中元素(即路径)的数量。
# length(path):返回路径的长度,即路径中关系的数量# 统计列表中元素数量
match (a) where a,name = "Mike"
return size(a --> () --> ());
(5) 字符串相关
# upper(),用于将所有字母更改为大写字母
# lower(),用于将所有字母改为小写字母
# substring(),用于截取字符串
# replace(),用于替换字符串
2. 断言函数
断言函数返回 true 或者 false,主要用于检查是否存在或满足特定的条件
(1) exists()
如果指定的模式存在于图中,或者特定的属性存在于节点、关系或Map中,那么函数返回True
# 查询具有 name 属性的所有节点
match (n)
where exists(n.name)
return n;
(2) 检查集合元素
1 -> all() 表示所有的元素都满足条件
# all 谓词表示,在路径中,所有节点都必须具有 age 属性,并且 age 属性值都必须大于20
match p = (a) - [*1..3] -> (b)
where all(x in nodes(p) where x.age > 30)
return p;
2 -> any() 表示至少一个元素满足条件
# any 谓词表示,节点的 array 属性中至少有一个元素值为"one"
match (a)
where any (x in a.array where x = "one")
return a;
3 -> none() 表示没有一个元素满足条件
# none 谓词表示,在路径中,没有节点的 age 属性是25
match p = (a) - [*1..3] -> (b)
where none(x in nodes(p) where x.age = 25)
return p;
4 -> single() 表示只有一个元素满足条件
# single 谓词表示,在路径中,只有一个节点的 eyes 属性是"blue"
match p = (n) --> (b)
where single(x in nodes(p) where x.eyes = "blue")
return p;
3. 聚合函数
聚合函数用于对查询结果进行统计
(1) avg(),计算均值
(2) count(),用于计算非 null 值的数量
# 使用 count(distinct n) 进行无重复非 null 值的计数
match (n) return count(distinct n.name);# 使用 count(*) 计算值或记录的总数量,包括 null 值
(3) max() 和 min(),求最大值和最小值
# 在计算极值时,null 被排除在外
# min(null) 和 max(null) 返回 null
(4) sum(),求和
# 在求和时,null 值被排除在外,sum(null) 的结果是0
(5) collect(),把返回的多个值或记录组装成一个列表
# collect(null) 返回一个空的列表
在聚合运算中,可以引用分组键来对查询的结果进行分组聚合
# 例如,在 return 子句中,如果表达式不是聚合函数,那么该表达式是分组 key,下面的表达式是按照 type(r) 分组,计算每个分组中记录的数量# 每个地点分别有多少人来过
match (l:地点) <- [:目的地] (p:人员) return l.name as 地点,count(*) as 人数;
4. 列表函数
列表(List)是 cypher 中的一个重要的组合类型,对列表进行操作的函数主要是生成列表、获取列表对象、抽取特定的列表元素、过滤列表元素和对列表元素进行迭代计算
(1) extract(),抽取元素构成列表,作用是从列表中抽取值
# extract(item in list | expression)
# 根据抽取的值组装成一个列表,返回这个列表match p = (a) --> (b) --> (c)
where a.name = "小明" and b.name = "小华" and c.name = "小红"
return extract(n in nodes(p) | n.age;
(2) filter(),过滤列表元素
# filter(item in list where predicate)
# 把过滤后的元素组成一个列表,返回这个列表match a where a.name = "马云"
return a.array, filter(x in a.array where x.size() = 3);
(3) 获得列表
# keys(node),从节点的属性中抽取属性键
# labels(node),节点标签的列表
# nodes(path),从路径中获取所有节点的列表
# relationships(path),从路径中获得所有的关系match (a) where a.name = "Kate"
return labels(a), keys(a);match p = (a) --> (b) --> (c)
where a.name = "小明" and c.name = "小红"
return nodes(p), relationships(p);
(4) 序列的生成和倒置
range(),用于生成一个有序的序列
reverse(),把原始列表的元素进行倒置
# range(start, end[ ,step]
# reverse(list)
(5) 迭代计算列表
reduce() 函数应用在列表上,对列表中的每个元素 item 进行迭代计算,在元素 item 上运行表达式(expression),把当前的结果存储在累加器中,进行迭代计算,并返回最终计算的标量结果
# reduce(accumulator = initial, item in list } expression)#例如,初始的 age 是0,对路径 p 中的所有节点,计算各个节点的 age 之和
match p = (a) --> (b) --> (c)
where a.name = "小明" and b.name = "小华" and c.name = "小红"
return reduce(totalAge = 0, n in nodes(p) | totalAge + n.age) as tatalAge;
Neo4j3-Neo4j基础操作(中)相关推荐
- 会计专业应用计算机操作,中职会计专业计算机应用基础教学
(下转第85页) 摘要提出中职学校会计专业计算机应用基础学科教学 的思路和一些具体做法. 关键词计算机基础教学方法中职会计专业 An Inquiry into the Teaching of &quo ...
- 02.PyTorch基础操作(3-1 机器学习中的分类与回归问题-机器学习基本构成元素)
@[TOC](02.PyTorch基础操作(3-1 机器学习中的分类与回归问题-机器学习基本构成元素)) 来自慕课网 一.3-1 机器学习中的分类与回归问题-机器学习基本构成元素
- mysql循环查询一个表中的数据并进行修改_JavaScript学习笔记(二十四)-- MYSQL基础操作...
MYSQL mysql 是一个数据库的名字 和 php 合作的比较好的数据库 之前我们说过一个问题,前端向后端索要数据,后端就是去数据库中查询数据,返回给前端 接下来就聊聊使用 php 操作数据库 M ...
- gdb 调试基础操作和在qtcreator中使用gdb调试
最近使用多线程,老是出现未知错误,比如程序死锁,或者线程突然挂掉,由于是多线程编程,单纯使用cout找不到出错点,只有学好gdb调试才能解决问题. 首先参考https://blog.csdn.net/ ...
- 【机器学习算法专题(蓄力计划)】五、机器学习中的线性代数的基础操作
文章目录 线性代数的基础操作 简单生成一个行向量 行向量的转置 (无效做法) 行向量的转置 直接生成一个列向量 (二维数组) 向量的内积 向量的外积 生成一个零矩阵 生成一个对角矩阵 生成一个单位矩阵 ...
- Python中pupl的基础操作
目录 1. 安装Pupl 2. 基础操作 2.1 样例 2.2 设置优化方向 2.3 写入目标函数 2.4 变量设置:01变量 2.5 变量设置:整数变量 2.6 变量设置:连续变量 2.7 变量设置 ...
- 提交表单自动刷新_Web自动化测试:元素的基础操作和浏览器基础操作
上一节,我们了解了如何定位元素,其实也有涉及对于元素的操作,这一节我们就详细的介绍一下对于元素的操作和对于浏览器的一些操作 一.对于元素的基础操作: clear():清除输入框内的文本 send_ke ...
- 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道
主要内容有:图像及视频的读取和保存.图像显示.转换灰度图.图像截取.颜色通道提取和组合 那我们开始吧. 1. 图像操作 首先我们导入opencv库,彩色图像一般都是由RGB(红绿蓝)三颜色通道构成,灰 ...
- JavaのFile类基础操作之问题
在上一章节,介绍了File类的基础操作,比如文件的创建,文件的删除等等.这一章节,将介绍在File类基础操作中遇到的问题. 1.路径分割符问题 在实际的软件开发与运行过程中,往往都会在Windows环 ...
- 计算机应用公共课程,公共基础课程中计算机应用管理制度
公共基础课程中计算机应用管理制度 作者:职称驿站 浏览量:14925 时间:2017-11-04 新科技技术的不断发展建设是带动教学发展.社会进步等等方面的因素.同时对于计算机应用上的建设发展来说也是 ...
最新文章
- react http请求_通过Webpack全局配置开发环境和多种生产环境的请求地址
- 用户层CS段描述符信息
- CodeForces - 363D Renting Bikes(二分+贪心)
- SQL validation failed.Column ‘content‘ not found in any table
- 程序人生:程序员成熟的标志
- 加州大学信息科学院长:数据科学课程不只是工程师才修的
- 【渝粤教育】电大中专新媒体营销实务 (16)作业 题库
- 预览docx_Windows-快速预览文件-QuickLook
- 银行界加强计算机病毒管理,银行计算机管理系统维护现状与对策研究(7.12).doc...
- mysql 批量替换域名_msyql 中批量替换url网址中的域名方案。
- unity打开一片黑_黑花儿和白花儿——记我家的两只猫星人
- 激战2:逐火之路-概念艺术设计
- javaweb(ssh)体育赛事网上售票系统案例
- 梦幻西游脚本开发教学
- 怎么读取cf卡id_CF卡传输程序的步骤解析
- Xmarks书签同步工具的用法
- Magento(CE1.X)自带模块解析七
- 金仓数据库 KingbaseES Sys_repack 解决金仓数据库 KingbaseES 表膨胀的问题
- CMake入门1——CMake与VS编译器和nmake的结合使用
- 名帖41 伊秉绶 隶书《对联八幅》