Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx

上传人:b****8 文档编号:10769430 上传时间:2023-02-22 格式:DOCX 页数:27 大小:51.98KB
下载 相关 举报
Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx_第1页
第1页 / 共27页
Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx_第2页
第2页 / 共27页
Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx_第3页
第3页 / 共27页
Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx_第4页
第4页 / 共27页
Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx

《Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx》由会员分享,可在线阅读,更多相关《Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx(27页珍藏版)》请在冰豆网上搜索。

Neo4j图数据库学习第四章Cypher 函数断言标量列表.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1