使用WITH
子句,可以在结果集传递给后续查询部分之前对其进行操作。这些操作可以改变结果集的形状或条目数量。
WITH
还可以像RETURN
一样,为引入到结果中的表达式创建别名,使用这些别名作为绑定名称。
WITH
还用于将图的读取与图的更新分开。查询的每一部分必须是只读或只写。从写入子句转换到读取子句时,可以使用可选的WITH
来实现这一转换。
基于聚合函数结果进行过滤
聚合结果必须通过一个WITH
子句才能进行过滤。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (david {name: 'David'})-[]-(otherPerson)-[]->()
WITH otherPerson, count(*) AS foaf
WHERE foaf > 1
RETURN otherPerson.name
$$) as (name agtype);
返回结果如下:
name
----------
"Anders"
(1 row)
在使用COLLECT之前对结果进行排序
可以在将结果传递给COLLECT之前对其进行排序,从而对最终列表进行排序。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n) WITH n
ORDER BY n.name DESC LIMIT 3
RETURN collect(n.name)
$$) as (names agtype);
返回一个逆序排列的人名列表,限制为3个,并将其包含在一个列表中。
names
--------------------------
["Emil","David","Ceasar"]
(1 row)
限制路径搜索的分支
可以先匹配路径,限制到一定数量,然后以这些路径为基础再次进行匹配,以及进行任意次数类似有限搜索。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'Anders'})-[]-(m) WITH m
ORDER BY m.name DESC LIMIT 1
MATCH (m)-[]-(o)
RETURN o.name
$$) as (name agtype);
从 'Anders' 开始,找到所有匹配的节点,按名称降序排列并获取顶部结果,然后找到与该顶部结果相连的所有节点,并返回它们的名称。
name
----------
"Anders"
"Bossman"
(2 rows)
该文章对您有帮助吗?
- 本页导读 (1)
- 基于聚合函数结果进行过滤
- 在使用COLLECT之前对结果进行排序
- 限制路径搜索的分支