Cypher函数 (方法)
分类:
- 断言函数
- 标量函数
- 列表函数
- 数学函数
- 字符串函数
实验实例:
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)return Alice,Charlie,Bob,Daniel,Eskil
1、断言(Predicate)函数
断言函数是对给定的输入返回true或者false的布尔函数。它们主要用于查询的WHERE部分过滤子图。
1.1 all()
判断是否一个断言适用于列表中的所有元素。
语法: all(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 |
1.2 any()
判断是否一个断言至少适用于列表中的一个元素。
语法: any(variable IN list WHERE predicate)
参数:
- list:返回列表的表达式
- variable:用于断言中的变量
- predicate:用于测试列表中所有元素的断言
MATCH (a) RETURN ANY (x IN a.array WHERE x = 'one') RETURN a |
返回路径中的所有节点的array数组属性中至少有一个值为'one'。
1.3 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 nodes(p) WHERE x.age = 25) RETURN p |
返回的路径中没有节点的age属性值为25。
1.4 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 |
每条返回的路径中刚好只有一个节点的eyes属性值为'blue'。
1.5 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值。
2、标量(Scalar)函数
标量函数返回一个单值。
2.1 size()
使用size()返回表中元素的个数。
语法: size( list )
参数: list:返回列表的表达式
RETURN size(['Alice', 'Bob']) AS col |
本查询返回了列表中元素的个数。
2.2 模式表达式的size
这里的size()的参数不是一个列表,而是一个模式表达式匹配到的查询结果集。计算的是结果集元素的个数,而不是表达式本身的长度。
语法: size( pattern expression )
参数: pattern expression:返回列表的模式表达式
MATCH (a) WHERE a.name = 'Alice' RETURN size((a)-->()-->()) AS fof |
本查询返回了模式表达式匹配到的子图的个数
2.3 length()
使用length()函数返回路径的长度。
语法: length( path )
参数: path:返回路径的表达式
MATCH p =(a)-->(b)-->(c) WHERE a.name = 'Alice' RETURN length(p) |
字符串的长度
语法: length( string )
参数: string:返回字符串的表达式
RETURN length('qwer')
MATCH (a) WHERE length(a.name)> 6 RETURN length(a.name) |
查询返回了name为’Charlie’的长度。
2.5 type()
返回字符串代表的关系类型。
语法: type( relationship )
参数: relationship:一个关系
MATCH (n)-[r]->() WHERE n.name = 'Alice' RETURN type(r)
|
查询返回了关系r的关系类型。
2.6 id()
返回关系或者节点的id。
语法: id( property-container )
参数: property-container:一个节点或者关系
MATCH (a) RETURN id(a) |
返回了5个节点的id。
2.7 coalesce()
返回表达式列表中的第一个非空的值。如果所有的实参都为空 ,则返回null。
语法: coalesce( expression [, expression]* )
参数: expression:表达式,可能返回null。
MATCH (a) WHERE a.name = 'Alice' RETURN coalesce(a.hairColor, a.eyes) |
2.8 head()
head()返回列表中的第一个元素。
语法: head( expression )
参数: expression:返回列表的表达式
MATCH (a) WHERE a.name = 'Eskil' RETURN a.array, head(a.array)
MATCH p=(n)-[r]->() WHERE n.name = 'Alice' return head(nodes(p))
|
返回了路径中的第一个节点。
2.9 last()
last()返回列表中的最后一个元素。
语法: last( expression )
参数: expression:返回列表的表达式
MATCH (a) WHERE a.name = 'Eskil' RETURN a.array, last(a.array) |
返回了路径中的最后一个节点。
2.10 timestamp()
timestamp()返回当前时间与1970年1月1日午夜之间的差值,单位以毫秒计算。它在整个查询中始终返回同一个值,即使是在一个运行时间很长的查询中。
语法: timestamp()
RETURN timestamp() |
以毫秒返回当前时间。
2.11 startNode()
startNode()返回一个关系的开始节点。
语法: startNode( relationship )
参数: relationship:返回关系的表达式
MATCH ()-[r]-() WHERE id(r)=0 RETURN startNode(r) |
2.12 endNode()
endNode()返回一个关系的结束节点。
语法: endNode( relationship )
参数: relationship:返回关系的表达式
MATCH ()-[r]-() WHERE id(r)=0 RETURN startNode(r),endNode(r) |
2.13 properties()
properties()将实参转为属性值的map。如果实参是一个节点或者关系,返回的就是节点或关系的属性的map。如果实参已经是一个map了,那么原样返回结果。
语法: properties( expression )
参数: expression:返回节点,关系或者map的表达式
match (n) where id(n) =0 RETURN properties(n) |
2.14 toInt()
toInt()将实参转换为一个整数。字符串会被解析为一个整数。如果解析失败,将返回null。浮点数将被强制转换为整数。
语法: toInt( expression )
参数: expression:返回任意值的表达式
RETURN toInt('42'), toInt('not a number') |
2.15 toFloat
toFloat()将实参转换为浮点数。字符串会被解析为一个浮点数。如果解析失败,将返回null。整数将被强制转换为浮点数。
语法: toFloat( expression )
参数: expression:返回任意值的表达式
RETURN toFloat('11.5'), toFloat('not a number') |