Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx
- 文档编号:10769430
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:27
- 大小:51.98KB
Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx
《Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx》由会员分享,可在线阅读,更多相关《Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx(27页珍藏版)》请在冰豆网上搜索。
Neo4j图数据库学习第四章Cypher函数断言标量列表
Cypher函数(方法)
在cypher中使用,如count()
MATCH(n)
returncount(n)
分类:
●断言函数
●标量函数
●列表函数
●数学函数
●字符串函数
实验实例:
CREATE(Alice{name:
'Alice',age:
38,eyes:
'brown'}),(Charlie{name:
'Charlie',age:
53,eyes:
'green'}),(Bob{name:
'Bob',age:
25,eyes:
'blue'}),(Daniel{name:
'Daniel',age:
54,eyes:
'brown'}),(Eskil{array:
['one','two','three'],name:
'Eskil',age:
41,eyes:
'blue'})
CREATE(Alice)-[:
KNOWS]->(Charlie),(Alice)-[:
KNOWS]->(Bob),(Charlie)-[:
KNOWS]->(Daniel),(Bob)-[:
KNOWS]->(Daniel),(Bob)-[:
MARRIED]->(Eskil)
returnAlice,Charlie,Bob,Daniel,Eskil
1.断言(Predicate)函数
断言函数是对给定的输入返回true或者false的布尔函数。
它们主要用于查询的WHERE部分过滤子图。
all()
判断是否一个断言适用于列表中的所有元素。
语法:
all(variableINlistWHEREpredicate)
参数:
●list:
返回列表的表达式
●variable:
用于断言中的变量
●predicate:
用于测试列表中所有元素的断言
MATCHp=(a)-[*1..3]->(b)
WHEREALL(xINnodes(p)WHEREx.age>30)
RETURNp
返回路径中的所有节点都有一个至少大于30的age属性。
any()
判断是否一个断言至少适用于列表中的一个元素。
语法:
any(variableINlistWHEREpredicate)
参数:
●list:
返回列表的表达式
●variable:
用于断言中的变量
●predicate:
用于测试列表中所有元素的断言
MATCH(a)
RETURNANY(xINa.arrayWHEREx='one')
RETURNa
返回路径中的所有节点的array数组属性中至少有一个值为'one'。
none()
如果断言不适用于列表中的任何元素,则返回true。
语法:
none(variableINlistWHEREpredicate)
参数:
●list:
返回列表的表达式
●variable:
用于断言中的变量
●predicate:
用于测试列表中所有元素的断言
MATCHp=(n)-[*1..3]->(b)
WHEREn.name='Alice'ANDNONE(xINnodes(p)WHEREx.age=25)
RETURNp
返回的路径中没有节点的age属性值为25。
single()
如果断言刚好只适用于列表中的某一个元素,则返回true。
语法:
single(variableINlistWHEREpredicate)
参数:
●list:
返回列表的表达式
●variable:
用于断言中的变量
●predicate:
用于测试列表中所有元素的断言
MATCHp=(n)-->(b)
WHEREn.name='Alice'ANDSINGLE(varINnodes(p)WHEREvar.eyes='blue')
RETURNp
每条返回的路径中刚好只有一个节点的eyes属性值为'blue'。
exists()
如果数据库中存在该模式或者节点中存在该属性时,则返回true。
语法:
exists(pattern-or-property)
参数:
pattern-or-property:
模式或者属性(以’variable.prop’的形式)
MATCH(n)
WHEREexists(n.name)
RETURNn.nameASname,exists((n)-[:
MARRIED]->())ASis_married
本查询返回了所有节点的name属性和一个指示是否已婚的true/false值。
1.标量(Scalar)函数
标量函数返回一个单值。
size()
使用size()返回表中元素的个数。
语法:
size(list)
参数:
●list:
返回列表的表达式
RETURNsize(['Alice','Bob'])AScol
本查询返回了列表中元素的个数。
模式表达式的size
这里的size()的参数不是一个列表,而是一个模式表达式匹配到的查询结果集。
计算的是结果集元素的个数,而不是表达式本身的长度。
语法:
size(patternexpression)
参数:
●patternexpression:
返回列表的模式表达式
MATCH(a)
WHEREa.name='Alice'
RETURNsize((a)-->()-->())ASfof
本查询返回了模式表达式匹配到的子图的个数。
length()
使用length()函数返回路径的长度。
语法:
length(path)
参数:
●path:
返回路径的表达式
MATCHp=(a)-->(b)-->(c)
WHEREa.name='Alice'
RETURNlength(p)
本查询返回路径p的长度。
字符串的长度
语法:
length(string)
参数:
●string:
返回字符串的表达式
RETURNlength('qwer')
MATCH(a)
WHERElength(a.name)>6
RETURNlength(a.name)
查询返回了name为’Charlie’的长度。
type()
返回字符串代表的关系类型。
语法:
type(relationship)
参数:
●relationship:
一个关系
MATCH(n)-[r]->()
WHEREn.name='Alice'
RETURNtype(r)
查询返回了关系r的关系类型。
id()
返回关系或者节点的id。
语法:
id(property-container)
参数:
●property-container:
一个节点或者关系
MATCH(a)
RETURNid(a)
返回了5个节点的id。
coalesce()
返回表达式列表中的第一个非空的值。
如果所有的实参都为空,则返回null。
语法:
coalesce(expression[,expression]*)
参数:
●expression:
表达式,可能返回null。
MATCH(a)
WHEREa.name='Alice'
RETURNcoalesce(a.hairColor,a.eyes)
head()
head()返回列表中的第一个元素。
语法:
head(expression)
参数:
●expression:
返回列表的表达式
MATCH(a)
WHEREa.name='Eskil'
RETURNa.array,head(a.array)
MATCHp=(n)-[r]->()
WHEREn.name='Alice'
returnhead(nodes(p))
返回了路径中的第一个节点。
last()
last()返回列表中的最后一个元素。
语法:
last(expression)
参数:
●expression:
返回列表的表达式
MATCH(a)
WHEREa.name='Eskil'
RETURNa.array,last(a.array)
返回了路径中的最后一个节点。
timestamp()
timestamp()返回当前时间与1970年1月1日午夜之间的差值,单位以毫秒计算。
它在整个查询中始终返回同一个值,即使是在一个运行时间很长的查询中。
语法:
timestamp()
参数:
无
RETURNtimestamp()
以毫秒返回当前时间。
startNode()
startNode()返回一个关系的开始节点。
语法:
startNode(relationship)
参数:
●relationship:
返回关系的表达式
MATCH()-[r]-()
WHEREid(r)=0
RETURNstartNode(r)
endNode()
endNode()返回一个关系的结束节点。
语法:
endNode(relationship)
参数:
●relationship:
返回关系的表达式
MATCH()-[r]-()
WHEREid(r)=0
RETURNstartNode(r),endNode(r)
properties()
properties()将实参转为属性值的map。
如果实参是一个节点或者关系,返回的就是节点或关系的属性的map。
如果实参已经是一个map了,那么原样返回结果。
语法:
properties(expression)
参数:
●expression:
返回节点,关系或者map的表达式
match(n)
whereid(n)=0
RETURNproperties(n)
toInt()
toInt()将实参转换为一个整数。
字符串会被解析为一个整数。
如果解析失败,将返回null。
浮点数将被强制转换为整数。
语法:
toInt(expression)
参数:
●expression:
返回任意值的表达式
RETURNtoInt('42'),toInt('notanumber')
toFloat
toFloat()将实参转换为浮点数。
字符串会被解析为一个浮点数。
如果解析失败,将返回null。
整数将被强制转换为浮点数。
语法:
toFloat(expression)
参数:
●expression:
返回任意值的表达式
RETURNtoFloat('11.5'),toFloat('notanumber')
3.列表(List)函数
列表函数返回列表中的元素,如路径中的节点等等。
nodes()
返回一条路径中的所有节点。
语法:
nodes(path)
参数:
●path:
一条路径
查询返回了路径p中的所有节点。
MATCHp=(a)-->(b)-->(c)
WHEREa.name='Alice'ANDc.name='Eskil'
RETURNnodes(p)
relationships()
返回一条路径中的所有关系。
语法:
relationships(path)
参数:
●path:
一条路径
MATCHp=(a)-->(b)-->(c)
WHEREa.name='Alice'ANDc.name='Eskil'
RETURNrelationships(p)
查询返回了路径p中的所有节点关系。
labels()
以字符串列表的形式返回一个节点的所有标签。
语法:
labels(node)
参数:
●node:
返回单个节点的任意表达式
MATCH(a)
WHEREa.name='Alice'
RETURNlabels(a)
查询返回了节点n的所有标签。
keys()
以字符串列表的形式返回一个节点,关系或者map的所有属性的名称。
语法:
keys(property-container)
参数:
●property-container:
一个节点,关系或者字面值的map
MATCH(a)
WHEREa.name='Alice'
RETURNkeys(a)
查询返回了节点a的属性名。
extract()
可以使用extract()从节点或关系列表中返回单个属性或者某个函数的值。
它将遍历整个列表,针对列表中的每个元素运行一个表达式,然后以列表的形式返回这些结果。
它的工作方式类似与Lisp和Scala等函数式语言中的map方法。
语法:
extract(variableINlist|expression)
参数:
●list:
返回列表的表达式
●variable:
引用list中元素的变量,它在expression中会用到
●expression:
针对列表中每个元素所运行的表达式,并产生一个结果列表。
MATCHp=(a)-->(b)-->(c)
WHEREa.name='Alice'ANDb.name='Bob'ANDc.name='Daniel'
RETURNextract(nINnodes(p)|n.age)ASextracted
返回了路径中所有节点的age属性。
filter()
filter()返回列表中满足断言要求的所有元素。
语法:
filter(variableINlistWHEREpredicate)
参数:
●list:
返回列表的表达式
●variable:
断言中引用列表元素所用到的变量
●predicate:
针对列表中每个元素进行测试的断言
MATCH(a)
WHEREa.name='Eskil'
RETURNa.array,filter(xINa.arrayWHEREsize(x)=3)
返回array属性,及其元素的字符数为3的元素列表。
tail()
tail()返回列表中除了首元素之外的所有元素。
语法:
tail(expression)
参数:
●expression:
返回某个类型列表的表达式
MATCH(a)
WHEREa.name='Eskil'
RETURNa.array,tail(a.array)
返回了array属性及属性中除了第一个之外的所有元素。
range()
range()返回一个范围内的数字。
值之间的默认步长为1。
范围包含起始边界值。
语法:
range(start,end[,step])
参数:
●start:
起点数值的表达式
●end:
结束数值的表达式
●step:
数值间隔的步长
RETURNrange(0,10),range(2,18,3)
第一个返回了0到10之间步长为1的所有值。
第二个返回了从2到18之间步长为3的所有值。
reduce()
可以用reduce()对列表中的每个元素执行一个表达式,将表达式结果存入一个累加器。
它的工作机制类似Lisp和Scala等函数式语言中的fold或者reduce方法。
语法:
reduce(accumulator=initial,variableINlist|expression)
参数:
●accmulator:
用于累加每次迭代的部分结果
●initial:
累加器的初始值
●list:
列表
●variable:
引用列表中的每个元素的变量
●expression:
针对列表中每个元素执行的表达式
MATCHp=(a)-->(b)-->(c)
WHEREa.name='Alice'ANDb.name='Bob'ANDc.name='Daniel'
RETURNreduce(totalAge=0,nINnodes(p)|totalAge+n.age)ASreduction
本查询将路径中每个节点的age数值加起来,然后返回一个单值。
4.数学函数
这些函数仅适用于数值表达式。
如果用于其他类型的值,将返回错误。
数值函数
abs()
abs()函数返回数值的绝对值。
语法:
abs(expression)
参数:
●expression:
数值表达式
MATCH(a),(e)
WHEREa.name='Alice'ANDe.name='Eskil'
RETURNa.age,e.age,abs(a.age-e.age)
返回两个年龄差值的绝对值。
ceil()
ceil()返回大于或等于实参的最小整数。
语法:
ceil(expression)
参数:
●expression:
数值表达式
RETURNceil(0.1)
返回大于0.1的最小整数,即为1。
floor()
floor()返回小于等于表达式的最大的整数。
语法:
floor(expression)
参数:
●expression:
数值表达式
RETURNfloor(0.9)
小于等于0.9的最大的整数为0。
round()
round()返回距离表达式值最近的整数。
语法:
round(expression)
参数:
●expression:
数值表达式
RETURNround(3.141592)
距离3.141592最近的整数为3。
sign()
sign()返回一个数值的正负。
如果值为零,则返回0。
如果值为负数,则返回-1。
如果值为正数,返回1。
语法:
sign(expression)
参数:
●expression:
数值表达
RETURNsign(-17),sign(0.1)
返回了-17和0.1的正负符号。
rand()
rand()返回[0,1)之间的一个随机数。
返回的数值在整个区间遵循均匀分布。
语法:
rand()
参数:
无
RETURNrand()
返回了一个随机数。
对数函数
log()
log()返回表达式的自然对数。
语法:
log(expression)
参数:
●expression:
数值表达式
RETURNlog(27)
返回了27的自然对数的值。
log10()
log10()返回表达式的常用对数(以10为底)。
语法:
log10(expression)
参数:
●expression:
数值表达式
RETURNlog10(27)
返回了27的常用对数。
exp()
exp()返回e^n,这里e是自然对数的底,n是表达式的实参值。
语法:
e(expression)
参数:
●expression:
数值表达式
RETURNexp
(2)
返回了e的二次方。
e()
e()返回自然对数的底,即e。
语法:
e()
参数:
无
RETURNe()
返回了自然对数的底e的值。
sqrt()
sqrt()返回数值的平方根。
语法:
sqrt(expression)
参数:
●expression:
数值表达式
RETURNsqrt(256)
返回了256的平方根,即16.
三角函数
除非特别指明,所有的三角函数都是针对弧度值进行计算的。
sin()
sin()返回表达式的正弦函数值。
语法:
sin(expression)
参数:
●expression:
一个表示角的弧度的数值表达式
RETURNsin(0.5)
返回弧度为0.5的正弦值。
cos()
cos()返回表达式的余弦函数值。
语法:
cos(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNcos(0.5)
返回了弧度为0.5的余弦。
tan()
tan()返回表达式的正切值。
语法:
tan(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNtan(0.5)
cot()
cot()返回表达式的余切值。
语法:
cot(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNcot(0.5)
返回了弧度为0.5的余切。
asin()
asin()返回表达式的反正弦值。
语法:
asin(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNasin(0.5)
返回了弧度为0.5的反正弦。
acos()
acos()返回表达式的反余弦值。
语法:
acos(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNacos(0.5)
返回了弧度为0.5的反余弦。
atan()
atan()返回表达式的反正切值。
语法:
atan(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNatan(0.5)
返回弧度0.5的反正切。
atan2()
atan2()返回方位角,也可以理解为计算复数x+yi的幅角。
语法:
atan2(expression1,expression2)
参数:
●expression1:
表示复数x部分的数值表达式
●expression2:
表示复数y部分的数值表达式
RETURNatan2(0.5,0.6)
返回了0.5和0.6的方位角。
pi()
pi()返回常数pi的数值。
语法:
pi()
参数:
无
RETURNpi()
返回常数pi的值。
degrees()
degrees()将弧度转为度。
语法:
degrees(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNdegrees(3.14159)
返回接近于pi的度数。
radians()
radians()将度转为弧度。
语法:
radians(expression)
参数:
●expression:
一个表示角度数的数值表达式
RETURNradians(180)
返回了180度的弧度值(pi)。
haversin()
haversin()返回表达式的半正矢。
语法:
haversin(expression)
参数:
●expression:
一个表示角弧度的数值表达式
RETURNhaversin(0.5)
返回了弧度为0.5的半正矢。
使用haversin函数计算球面距离
haversin()函数可用于计算球面上两点(以经纬度的方式给出)之间的距离。
在本例计算了德国柏林(lat52.5,lo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Neo4j图数据库学习第四章Cypher 函数断言标量列表 Neo4j 数据库 学习 第四 Cypher 函数 断言 标量 列表