Cypher函数分类:
- 断言函数
- 标量函数
- 列表函数
- 数学函数
- 字符串函数
断言函数:
对给定的输入返回true或false的布尔函数,主要用于查询WHERE的部分过滤子图
ALL:判断一个断言是否适用于列表中的所有元素
// 返回路径中的所有结点都有一个至少大于30的age属性
MATCH p = (a)-[*1..3]->(b)
WHERE a.name = 'Alice' AND b.name = 'Daniel' AND ALL(x IN nodes(p) WHERE x.age > 30)
RETURN p
ANY():判断是否一个断言至少适用于列表中的一个元素
// 返回路径中的所有节点的array数组属性中至少有一个值为'one'
MATCH (a)
WHERE a.name = 'Eskil' AND ANY(x IN a.array WHERE x = 'one')
RETURN a
NONE():断言不适合用于列表中的任何元素则返回true
// 返回匹配到的路径中没有节点的age属性为25
MATCH p = (n)-[*1..3]->(b)
WHERE n.name = 'Alice' AND NONE(x IN nodes(p) WHERE x.age = 25)
RETURN p
SINGLE():断言刚好只适用于列表中的某一元素,则返回true
// 返回匹配到的路径中刚好只有一个节点的eyes属性值为blue
MATCH p = (n)-->(b)
WHERE n.name = 'ALICE' AND SINGLE(var IN nodes(p) WHERE var.eyes = 'blue')
RETURN p
EXISTS():如果数据库中存在该模式或节点存在该属性时,返回true
MATCH (n)
WHERE EXISTS(n.name)
标量函数
返回一个单值
size():返回列表中元素的个数
RETURN size(['Alice', 'Bob']) AS col
// 返回模式表达式匹配到的查询结果集,计算的是结果集元素的个数
MATCH(a)
WHERE a.name = 'Alice'
RETURN size((a)-->()-->()) AS fof
lenth():返回路径,字符串的长度
// 返回匹配到路径的长度
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice'
RETURN length(p)
// 返回字符串的长度
MATCH (a)
WHERE length(a.name) > 6
RETURN length(a.name)
type():返回关系的类型
MATCH (n)-[r]->()
WHERE n.name = 'Alice'
RETURN type(r)
id:返回元素数据或关系的id标识
MATCH (a)
RETURN id(a)
coalesce():返回表达式列表中第一个非空的值,如果所有的实参都为空,则返回null
MATCH (a)
WHERE a.name = 'Alice'
RETURN coalesce(a.hairColor, a.eyes)
head():返回列表中的第一个元素
last():返回列表中的最后一个元素
// 返回了查找路径中的第一个节点
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.array, head(a.array)
// 返回了查找路径中的最后一个节点
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.array, last(a.array)
startNode():返回一个关系的开始节点
endNode():返回一个关系的结束节点
MATCH (n:Person{name:'Tom Hanks'})-[r]-(m)
RETURN startNode(r), endNode(r)
properties():将实参转换成属性值的map,实参可以是节点或关系
// 返回匹配到节点的所有属性名与属性值
CREATE (p:Person{name:'Stefan', city:'Berlin'})
RETURN properties(p)
toInt():强制转换成整数,若解析失败,则返回null
toFloat():强制转换成浮点数,若解析失败则返回null
RETURN toInt('42'), toFloat('24')
列表函数
返回值为列表的函数
nodes():返回查询路径中所有的节点
relationships():返回一条路径中所有的关系
labels():返回查询元素中所有的标签
keys():返回节点或关系上所有的属性名
extract():从节点或关系列表中返回单个属性或者某个函数的值,这将遍历整个列表,针对每一个元素运行表达式,并返回结果列表
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice' AND b.name = 'Bob' AND c.name = 'Daniel'
RETURN extract(n IN nodes(p)|n.age) AS extracted
filter():返回列表中满足断言的所有元素
// 返回array属性元素字符数为3的列表
MATCH(a)
WHERE a.name = 'Eskil'
RETURN filter(x IN a.array WHERE size(x) = 3)
tail():返回除了首元素以外的所有元素
range():返回一个范围内的数字,步长默认为1,包含起始的边界值
RETURN range(0, 10, 2)
reduce():对列表中的元素执行一个表达式并将结果存入累加器中
// 将路径中所有节点的age都加起来返回一个单值
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice' AND b.name = 'Bob' AND c.name = 'Daniel'
RETURN reduce(count = 0, n IN nodes(p)|count + n.age) AS reduction
数学函数:
进行数学运算的函数
abs():返回数值的绝对值
ceil():返回大于或小于等于实参的最小整数
floor():返回小于或等于表达式的最大整数
round():返回距离表达式值最近的整数
sign():返回一个数值的正负,正为1,复为-1,零则为0
rand():返回[0,1)之间的一个随机数
sqrt():平方
......
字符串函数:
字符串函数都只是针对字符串表达式,用于其它值则会返回错误,而toString()可以接受数字值与布尔值
replace():字符串替换
RETURN replace("hello", "l", "w")
substring():字符串子串,接受一个字符串,开始索引位置,长度
RETURN substring('hello', 1, 3)
left():返回左半部分指定长度的字符串
right():返回右半部分指定长度的字符串
RETURN right('hello', 3)
ltrim():返回原字符串移除左侧的空白字符后的字符串
rtrim():返回移除原字符串右侧的空白字符字符串
split():返回以指定模式分隔后的字符串序列
RETURN split('one,two', ',')
reverse():返回原字符串的倒序字符串
toString():将实参转换成字符串