1、Neo4j图数据库学习第四章Cypher 函数断言标量列表Cypher函数 (方法)在cypher中使用,如count()MATCH (n)return count(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,
2、two,three,name: Eskil ,age:41,eyes:blue)CREATE (Alice)-:KNOWS-(Charlie),(Alice)-:KNOWS-(Bob),(Charlie)-:KNOWS-(Daniel),(Bob)-:KNOWS-(Daniel),(Bob)-:MARRIED-(Eskil)return Alice,Charlie,Bob,Daniel,Eskil1. 断言(Predicate)函数断言函数是对给定的输入返回true或者false的布尔函数。它们主要用于查询的WHERE部分过滤子图。all()判断是否一个断言适用于列表中的所有元素。语法: al
3、l(variable IN list WHERE predicate)参数: list:返回列表的表达式 variable:用于断言中的变量 predicate:用于测试列表中所有元素的断言MATCH p =(a)-*1.3-(b)WHERE ALL (x IN nodes(p) WHERE x.age 30)RETURN p返回路径中的所有节点都有一个至少大于30的age属性。any()判断是否一个断言至少适用于列表中的一个元素。语法: any(variable IN list WHERE predicate)参数: list:返回列表的表达式 variable:用于断言中的变量 predi
4、cate:用于测试列表中所有元素的断言MATCH (a)RETURN ANY (x IN a.array WHERE x = one)RETURN a返回路径中的所有节点的array数组属性中至少有一个值为one。none()如果断言不适用于列表中的任何元素,则返回true。语法: none(variable IN list WHERE predicate)参数: list:返回列表的表达式 variable:用于断言中的变量 predicate:用于测试列表中所有元素的断言MATCH p =(n)-*1.3-(b)WHERE n.name = Alice AND NONE (x IN nod
5、es(p) WHERE x.age = 25)RETURN p返回的路径中没有节点的age属性值为25。single()如果断言刚好只适用于列表中的某一个元素,则返回true。语法: single(variable IN list WHERE predicate)参数: list:返回列表的表达式 variable:用于断言中的变量 predicate:用于测试列表中所有元素的断言MATCH p =(n)-(b)WHERE n.name = Alice AND SINGLE (var IN nodes(p) WHERE var.eyes = blue)RETURN p每条返回的路径中刚好只有一
6、个节点的eyes属性值为blue。exists()如果数据库中存在该模式或者节点中存在该属性时,则返回true。语法: exists( pattern-or-property )参数: pattern-or-property:模式或者属性(以variable.prop的形式)MATCH (n)WHERE exists(n.name)RETURN n.name AS name, exists(n)-:MARRIED-() AS is_married本查询返回了所有节点的name属性和一个指示是否已婚的true/false值。1. 标量(Scalar)函数标量函数返回一个单值。 size()使用s
7、ize()返回表中元素的个数。语法: size( list )参数: list:返回列表的表达式RETURN size(Alice, Bob) AS col本查询返回了列表中元素的个数。模式表达式的size这里的size()的参数不是一个列表,而是一个模式表达式匹配到的查询结果集。计算的是结果集元素的个数,而不是表达式本身的长度。语法: size( pattern expression )参数: pattern expression:返回列表的模式表达式MATCH (a)WHERE a.name = AliceRETURN size(a)-()-() AS fof本查询返回了模式表达式匹配到的
8、子图的个数。length()使用length()函数返回路径的长度。语法: length( path )参数: path:返回路径的表达式MATCH p =(a)-(b)-(c)WHERE a.name = AliceRETURN length(p)本查询返回路径p的长度。字符串的长度语法: length( string )参数: string:返回字符串的表达式RETURN length(qwer)MATCH (a)WHERE length(a.name) 6RETURN length(a.name)查询返回了name为Charlie的长度。type()返回字符串代表的关系类型。语法: ty
9、pe( relationship )参数: relationship:一个关系MATCH (n)-r-()WHERE n.name = AliceRETURN type(r)查询返回了关系r的关系类型。id()返回关系或者节点的id。语法: id( property-container )参数: property-container:一个节点或者关系MATCH (a)RETURN id(a)返回了5个节点的id。coalesce()返回表达式列表中的第一个非空的值。如果所有的实参都为空 ,则返回null。语法: coalesce( expression , expression* )参数: e
10、xpression:表达式,可能返回null。MATCH (a)WHERE a.name = AliceRETURN coalesce(a.hairColor, a.eyes)head()head()返回列表中的第一个元素。语法: head( expression )参数: expression:返回列表的表达式MATCH (a)WHERE a.name = EskilRETURN a.array, head(a.array)MATCH p=(n)-r-()WHERE n.name = Alicereturn head(nodes(p)返回了路径中的第一个节点。last()last()返回列表
11、中的最后一个元素。语法: last( expression )参数: expression:返回列表的表达式MATCH (a)WHERE a.name = EskilRETURN a.array, last(a.array)返回了路径中的最后一个节点。timestamp()timestamp()返回当前时间与1970年1月1日午夜之间的差值,单位以毫秒计算。它在整个查询中始终返回同一个值,即使是在一个运行时间很长的查询中。语法: timestamp()参数: 无RETURN timestamp()以毫秒返回当前时间。startNode()startNode()返回一个关系的开始节点。语法: s
12、tartNode( relationship )参数: relationship:返回关系的表达式MATCH ()-r-()WHERE id(r)=0RETURN startNode(r)endNode()endNode()返回一个关系的结束节点。语法: endNode( relationship )参数: relationship:返回关系的表达式MATCH ()-r-()WHERE id(r)=0RETURN startNode(r),endNode(r)properties()properties()将实参转为属性值的map。如果实参是一个节点或者关系,返回的就是节点或关系的属性的map
13、。如果实参已经是一个map了,那么原样返回结果。语法: properties( expression )参数: expression:返回节点,关系或者map的表达式match (n) where id(n) =0RETURN properties(n)toInt()toInt()将实参转换为一个整数。字符串会被解析为一个整数。如果解析失败,将返回null。浮点数将被强制转换为整数。语法: toInt( expression )参数: expression:返回任意值的表达式RETURN toInt(42), toInt(not a number)toFloattoFloat()将实参转换为浮
14、点数。字符串会被解析为一个浮点数。如果解析失败,将返回null。整数将被强制转换为浮点数。语法: toFloat( expression )参数: expression:返回任意值的表达式RETURN toFloat(11.5), toFloat(not a number)3.列表(List)函数列表函数返回列表中的元素,如路径中的节点等等。nodes()返回一条路径中的所有节点。语法: nodes( path )参数: path:一条路径查询返回了路径p中的所有节点。MATCH p =(a)-(b)-(c)WHERE a.name = Alice AND c.name = EskilRETU
15、RN nodes(p)relationships()返回一条路径中的所有关系。语法: relationships( path )参数: path:一条路径MATCH p =(a)-(b)-(c)WHERE a.name = Alice AND c.name = EskilRETURN relationships(p)查询返回了路径p中的所有节点关系。labels()以字符串列表的形式返回一个节点的所有标签。语法: labels( node )参数: node:返回单个节点的任意表达式MATCH (a)WHERE a.name = AliceRETURN labels(a)查询返回了节点n的所有
16、标签。keys()以字符串列表的形式返回一个节点,关系或者map的所有属性的名称。语法: keys( property-container )参数: property-container:一个节点,关系或者字面值的mapMATCH (a)WHERE a.name = AliceRETURN keys(a)查询返回了节点a的属性名。extract()可以使用extract()从节点或关系列表中返回单个属性或者某个函数的值。它将遍历整个列表,针对列表中的每个元素运行一个表达式,然后以列表的形式返回这些结果。它的工作方式类似与Lisp和Scala等函数式语言中的map方法。语法: extract(
17、variable IN list | expression )参数: list:返回列表的表达式 variable:引用list中元素的变量,它在expression中会用到 expression:针对列表中每个元素所运行的表达式,并产生一个结果列表。MATCH p =(a)-(b)-(c)WHERE a.name = Alice AND b.name = Bob AND c.name = DanielRETURN extract(n IN nodes(p)| n.age) AS extracted返回了路径中所有节点的age属性。filter()filter()返回列表中满足断言要求的所有元
18、素。语法: filter(variable IN list WHERE predicate)参数: list:返回列表的表达式 variable:断言中引用列表元素所用到的变量 predicate:针对列表中每个元素进行测试的断言MATCH (a)WHERE a.name = EskilRETURN a.array, filter(x IN a.array WHERE size(x)= 3)返回array属性,及其元素的字符数为3的元素列表。tail()tail()返回列表中除了首元素之外的所有元素。语法: tail( expression )参数: expression:返回某个类型列表的表
19、达式MATCH (a)WHERE a.name = EskilRETURN a.array, tail(a.array)返回了array属性及属性中除了第一个之外的所有元素。range()range()返回一个范围内的数字。值之间的默认步长为1。范围包含起始边界值。语法: range( start, end , step )参数: start:起点数值的表达式 end:结束数值的表达式 step:数值间隔的步长RETURN range(0, 10), range(2, 18, 3)第一个返回了0到10之间步长为1的所有值。第二个返回了从2到18之间步长为3的所有值。reduce()可以用red
20、uce()对列表中的每个元素执行一个表达式 ,将表达式结果存入一个累加器。它的工作机制类似Lisp和Scala等函数式语言中的fold或者reduce方法。语法: reduce( accumulator = initial, variable IN list | expression )参数: accmulator:用于累加每次迭代的部分结果 initial:累加器的初始值 list:列表 variable:引用列表中的每个元素的变量 expression:针对列表中每个元素执行的表达式MATCH p =(a)-(b)-(c)WHERE a.name = Alice AND b.name =
21、Bob AND c.name = DanielRETURN reduce(totalAge = 0, n IN nodes(p)| totalAge + n.age) AS reduction本查询将路径中每个节点的age数值加起来,然后返回一个单值。4. 数学函数这些函数仅适用于数值表达式。如果用于其他类型的值,将返回错误。数值函数abs()abs()函数返回数值的绝对值。语法: abs( expression )参数: expression:数值表达式MATCH (a),(e)WHERE a.name = Alice AND e.name = EskilRETURN a.age, e.ag
22、e, abs(a.age - e.age)返回两个年龄差值的绝对值。ceil()ceil()返回大于或等于实参的最小整数。语法: ceil( expression )参数: expression:数值表达式RETURN ceil(0.1)返回大于0.1的最小整数,即为1。floor()floor()返回小于等于表达式的最大的整数。语法: floor( expression )参数: expression:数值表达式RETURN floor(0.9)小于等于0.9的最大的整数为0。round()round()返回距离表达式值最近的整数。语法: round( expression )参数: exp
23、ression:数值表达式RETURN round(3.141592)距离3.141592最近的整数为3。sign()sign()返回一个数值的正负。如果值为零,则返回0。如果值为负数,则返回-1。如果值为正数,返回1。语法: sign( expression )参数: expression:数值表达RETURN sign(-17), sign(0.1)返回了-17和0.1的正负符号。rand()rand()返回0, 1)之间的一个随机数。返回的数值在整个区间遵循均匀分布。语法: rand()参数: 无RETURN rand()返回了一个随机数。对数函数log()log()返回表达式的自然对数
24、。语法: log( expression )参数: expression:数值表达式RETURN log(27)返回了27的自然对数的值。log10()log10()返回表达式的常用对数(以10为底)。语法: log10( expression )参数: expression:数值表达式RETURN log10(27)返回了27的常用对数。exp()exp()返回en,这里e是自然对数的底,n是表达式的实参值。语法: e( expression )参数: expression:数值表达式RETURN exp(2)返回了e的二次方。e()e()返回自然对数的底,即e。语法: e()参数: 无RE
25、TURN e()返回了自然对数的底e的值。sqrt()sqrt()返回数值的平方根。语法: sqrt( expression )参数: expression:数值表达式RETURN sqrt(256)返回了256的平方根,即16.三角函数除非特别指明,所有的三角函数都是针对弧度值进行计算的。sin()sin()返回表达式的正弦函数值。语法: sin( expression )参数: expression:一个表示角的弧度的数值表达式RETURN sin(0.5)返回弧度为0.5的正弦值。cos()cos()返回表达式的余弦函数值。语法: cos( expression )参数: express
26、ion:一个表示角弧度的数值表达式RETURN cos(0.5)返回了弧度为0.5的余弦。tan()tan()返回表达式的正切值。语法: tan( expression )参数: expression:一个表示角弧度的数值表达式RETURN tan(0.5)cot()cot()返回表达式的余切值。语法: cot( expression )参数: expression:一个表示角弧度的数值表达式RETURN cot(0.5)返回了弧度为0.5的余切。asin()asin()返回表达式的反正弦值。语法: asin( expression )参数: expression:一个表示角弧度的数值表达式
27、RETURN asin(0.5)返回了弧度为0.5的反正弦。acos()acos()返回表达式的反余弦值。语法: acos( expression )参数: expression:一个表示角弧度的数值表达式RETURN acos(0.5)返回了弧度为0.5的反余弦。atan()atan()返回表达式的反正切值。语法: atan( expression )参数: expression:一个表示角弧度的数值表达式RETURN atan(0.5)返回弧度0.5的反正切。atan2()atan2()返回方位角,也可以理解为计算复数 x+yi 的幅角。语法: atan2( expression1, ex
28、pression2 )参数: expression1:表示复数x部分的数值表达式 expression2:表示复数y部分的数值表达式RETURN atan2(0.5, 0.6)返回了0.5和0.6的方位角。pi()pi()返回常数pi的数值。语法: pi()参数: 无RETURN pi()返回常数pi的值。degrees()degrees()将弧度转为度。语法: degrees( expression )参数: expression:一个表示角弧度的数值表达式RETURN degrees(3.14159)返回接近于pi的度数。radians()radians()将度转为弧度。语法: radians( expression )参数: expression:一个表示角度数的数值表达式RETURN radians(180)返回了180度的弧度值(pi)。haversin()haversin()返回表达式的半正矢。语法: haversin( expression )参数: expression:一个表示角弧度的数值表达式RETURN haversin(0.5)返回了弧度为0.5的半正矢。使用haversin函数计算球面距离haversin()函数可用于计算球面上两点(以经纬度的方式给出)之间的距离。在本例计算了德国柏林(lat 52.5,lo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1