Cypher查询语言--Neo4j 之高级篇 (六)

时间:2020-11-28 05:07:49

目录

  1. 排序Order by
    1. 通过节点属性排序节点
    2. 通过多节点属性排序节点
    3. 倒序排列节点
    4. 空值排序
  2. Skip
    1. 跳过前三个
    2. 返回中间两个
  3. Limit
    1. 返回第一部分
  4. 函数Functions
    1. 判断
    2. All
    3. Any
    4. None
    5. Single
    6. Scalar函数
    7. Length
    8. Type
    9. Id
    10. Coalesce
    11. Iterable函数
    12. Nodes
    13. Relationships
    14. Extract

排序(Order by)

输出结果排序可以使用order by 子句。注意,不能使用节点或者关系排序,仅仅只针对其属性有效。

图:

Cypher查询语言--Neo4j 之高级篇 (六)

通过节点属性排序节点

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.name

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

通过多节点属性排序节点

在order by子句中可以通过多个属性来排序每个标识符。Cypher首先将通过第一个标识符排序,如果第一个标识符或属性相等,则在order by中检查下一个属性,依次类推。

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.age, n.name

首先通过age排序,然后再通过name排序。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

倒序排列节点

可以在标识符后添加desc或asc来进行倒序排列或顺序排列。

查询:

START n=node(3,1,2)

RETURN n

ORDER BY n.name DESC

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

空值排序

当排列结果集时,在顺序排列中null将永远放在最后,而在倒序排列中放最前面。

查询:

START n=node(3,1,2)

RETURN n.length?, n

ORDER BY n.length?

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Skip

Skip允许返回总结果集中的一个子集。此不保证排序,除非使用了order by’子句。

图:

Cypher查询语言--Neo4j 之高级篇 (六)

跳过前三个

返回结果中一个子集,从第三个结果开始,语法如下:

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

ORDER BY n.name

SKIP 3

前三个节点将略过,最后两个节点将被返回。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

返回中间两个

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

ORDER BY n.name

SKIP 1

LIMIT 2

中间两个节点将被返回。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Limit

Limit允许返回结果集中的一个子集。

图:

Cypher查询语言--Neo4j 之高级篇 (六)

返回第一部分

查询:

START n=node(3, 4, 5, 1, 2)

RETURN n

LIMIT 3

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

函数(Functions)

在Cypher中有一组函数,可分为三类不同类型:判断、标量函数和聚类函数。

图:

Cypher查询语言--Neo4j 之高级篇 (六)

判断

判断为boolean函数,对给出的输入集合做判断并返回true或者false。常用在where子句中过滤子集。

All

迭代测试集合中所有元素的判断。

语法:

All(标识符 in iterable where 判断)

参数:

Ø  iterable :一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  标识符:可用于判断比较的标识符。

Ø  判断:一个测试所有迭代器中元素的判断。

查询:

START a=node(3), b=node(1)

MATCH p=a-[*1..3]->b

WHERE all(x in nodes(p) WHERE x.age > 30)

RETURN p

过滤包含age〈30的节点的路径,返回符合条件路径中所有节点。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Any

语法:ANY(identifierin iterable WHERE predicate)

参数:

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  Identifier(标识符):可用于判断比较的标识符。

Ø  Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START a=node(2)

WHERE any(x in a.array WHERE x = "one")

RETURN a

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

None

在迭代器中没有元素判断将返回true。

语法:NONE(identifierin iterable WHERE predicate)

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  Identifier(标识符):可用于判断比较的标识符。

Ø  Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START n=node(3)

MATCH p=n-[*1..3]->b

WHERE NONE(x in nodes(p) WHERE x.age = 25)

RETURN p

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Single

如果迭代器中仅有一个元素则返回true。

语法:SINGLE(identifierin iterable WHERE predicate)

参数:

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø Identifier(标识符):可用于判断比较的标识符。

Ø Predicate(判断):一个测试所有迭代器中元素的判断。

查询:

START n=node(3)

MATCH p=n-->b

WHERE SINGLE(var in nodes(p) WHERE var.eyes = "blue")

RETURN p

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Scalar函数

标量函数返回单个值。

Length

使用详细的length属性,返回或过滤路径的长度。

语法:LENGTH(iterable )

参数:

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

查询:

START a=node(3)

MATCH p=a-->b-->c

RETURN length(p)

返回路径的长度。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Type

返回关系类型的字符串值。

语法:TYPE(relationship )

参数:

Ø  Relationship:一条关系。

查询:

START n=node(3)

MATCH (n)-[r]->()

RETURN type(r)

返回关系r的类型。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Id

返回关系或者节点的id

语法:ID(property-container )

参数:

Ø  Property-container:一个节点或者一条关系。

查询:

START a=node(3, 4, 5)

RETURN ID(a)

返回这三个节点的id。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Coalesce

返回表达式中第一个非空值。

语法:COALESCE(expression [, expression]* )

参数:

Ø  Expression:可能返回null的表达式。

查询:

START a=node(3)

RETURN coalesce(a.hairColour?,a.eyes?)

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Iterable函数

迭代器函数返回一个事物的迭代器---在路径中的节点等等。

Nodes

返回一个路径中的所有节点。

语法:NODES(path )

参数:

Ø  Path:路径

查询:

START a=node(3), c=node(2)

MATCH p=a-->b-->c

RETURN NODES(p)

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Relationships

返回一条路径中的所有关系。

语法:RELATIONSHIPS(path )

参数:

Ø  Path:路径

查询:

START a=node(3), c=node(2)

MATCH p=a-->b-->c

RETURN RELATIONSHIPS(p)

结果:

Cypher查询语言--Neo4j 之高级篇 (六)

Extract

可以使用extract单个属性,或从关系或节点集合迭代一个函数的值。将遍历迭代器中所有的节点并运行表达式返回结果。

语法:EXTRACT(identifier in iterable : expression )

Ø  Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。

Ø  Identifier(标识符):闭包中表述内容的标识符,这决定哪个标识符将用到。

Ø  expression(表达式):这个表达式将对于迭代器中每个值运行一次,并生成一个结果迭代器。

查询:

START a=node(3), b=node(4),c=node(1)

MATCH p=a-->b-->c

RETURN extract(n in nodes(p) : n.age)

返回路径中所有age属性值。

结果:

Cypher查询语言--Neo4j 之高级篇 (六)