标签:strong 函数应用 rev one init 最大 path targe doc
Cypher函数是对图进行查询和操作的重要工具。
谓词函数返回true或者false,主要用于检查是否存在或满足特定的条件。
1,Exists
如果指定的模式存在于图中,或者特定的属性存在于节点、关系或Map中,那么函数返回True
例如,节点具有name属性,并check图中是否存在特定的模式:
MATCH (n)
WHERE exists(n.name)
RETURN n.name AS name, exists((n)-[:MARRIED]->()) AS is_married
2,检查集合元素
all()表示所有的元素都满足条件,any()表示至少一个元素满足条件,none()函数表示没有一个元素满足条件,single()表示只有一个元素满足条件
例如,ALL谓词表示,在路径中,所有节点都必须具有age属性,并且age属性值都必须大于30:
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.name, a.array
NONE谓词表示,在路径中,没有节点的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谓词表示,在路径中,只有一个节点的eyes属性是blue:
MATCH p =(n)-->(b) WHERE n.name = ‘Alice‘ AND SINGLE (var IN nodes(p) WHERE var.eyes = ‘blue‘) RETURN p
变量函数返回标量值
1,获得节点和关系的ID和属性
CREATE (p:Person { name: ‘Stefan‘, city: ‘Berlin‘ }) RETURN id(p), properties(p)
2,关系
关系是由开始节点,结束节点和边构成的:
MATCH (n)-[r]->() WHERE n.name = ‘Alice‘ RETURN type(r), startNode(r), endNode(r)
3,列表相关
列表是元素的有序序列,Cypher使用List来表示列表类型,应用于列表的函数有:
例如,节点的array属性,
MATCH (a) WHERE a.name = ‘Eskil‘ RETURN a.array, head(a.array), last(a.array), size(a.array)
4,size()和length()函数
求长度的函数:
例如,统计路径列表中的元素数量:
MATCH (a) WHERE a.name = ‘Alice‘ RETURN size((a)-->()-->()) AS fof
聚合函数用于对查询的结果进行统计:
在聚合计算中,可以引用分组键来对查询的结果进行分组聚合,例如,在return子句中,如果表达式不是聚合函数,那么该表达式是分组key,下面的表达式是按照type(r)分组,计算每个分组中记录的数量。
RETURN type(r), count(*)
列表是Cypher中的一个重要的复合类型,对列表进行操作的函数主要是生成列表、获取列表对象、抽取特定的列表元素、过滤列表元素和对列表元素进行迭代计算。
1,抽取元素构成列表
extract函数的作用是从列表中抽取值,
extract(variable IN list | expression)
根据抽取的值组装成一个列表,返回一个列表:
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
2,过滤列表元素
filter函数用于对列表中的元素进行过滤,
filter(variable IN list WHERE predicate)
把过滤后的元素组成一个了表,返回该列表:
MATCH (a) WHERE a.name = ‘Eskil‘ RETURN a.array, filter(x IN a.array WHERE size(x)= 3)
3,获得列表
MATCH (a) WHERE a.name = ‘Alice‘ RETURN labels(a),keys(a) MATCH p =(a)-->(b)-->(c) WHERE a.name = ‘Alice‘ AND c.name = ‘Eskil‘ RETURN nodes(p), relationships(p)
4,序列的生成和倒置
range()函数,用于生成一个有序的序列,reverse()函数把原始列表的元素进行倒置
range(start, end [, step])
reverse(list)
5,迭代计算列表
reduce()函数应用在列表上,对列表中的每个元素e进行迭代计算,在元素e上运行表达式(expression),把当前的结果存储在累加器中,进行迭代计算,并返回最终计算的标量结果:
reduce(accumulator = initial, e IN list | expression)
例如,初始的age值是0,对路径p中的所有节点,计算各个节点的age值的和:
MATCH p =(a)-->(b)-->(c) WHERE a.name = ‘Alice‘ AND b.name = ‘Bob‘ AND c.name = ‘Daniel‘ RETURN reduce(totalAge = 0, n IN nodes(p)| totalAge + n.age) AS reduction
参考文档:
标签:strong 函数应用 rev one init 最大 path targe doc
原文地址:https://www.cnblogs.com/ljhdo/p/10919763.html