概述
FILTER
语句从当前工作表中过滤掉不符合指定条件的记录;通常会引用工作表中的列。
<filter statement> ::= "FILTER" [ "WHERE" ] <search condition>
FILTER
和FILTER WHERE
表现一致。在这里使用WHERE
通常是出于风格考虑或提高可读性。
MATCH (n:User)
FILTER n.age > 25
RETURN n
在功能上与以下查询一致:
MATCH (n:User)
FILTER WHERE n.age > 25
RETURN n
在这两个例子里,FILTER
语句只会返回用户年龄大于25岁的点。
对比FILTER与MATCH WHERE
MATCH
语句中的FILTER
语句和WHERE
从句都用来指定查询中的条件,二者的差异主要体现在评估的时间和方式。
WHERE
从句只能用作MATCH
语句的一部分,被视作图模式进程的一部分。
MATCH (n:User)
WHERE n.age > 25
RETURN n
FILTER
语句在前置语句执行后才能得到评估;需要从前置语句中获取结果,并使用附加条件过滤结果。
MATCH (n:User)
FILTER n.age > 25
RETURN n
示例图集
以下示例根据该图集运行:
在空图集中运行以下语句创建示例图集:
INSERT (rowlock:User {_id: 'U01', name: 'rowlock'}),
(brainy:User {_id: 'U02', name: 'Brainy'}),
(purplechalk:User {_id: 'U03', name: 'purplechalk'}),
(mochaeach:User {_id: 'U04', name: 'mochaeach'}),
(lionbower:User {_id: 'U05', name: 'lionbower'}),
(c01:Club {_id: 'C01', since: 2005}),
(c02:Club {_id: 'C02', since: 2005}),
(rowlock)-[:Follows {createdOn: '2024-1-5'}]->(brainy),
(mochaeach)-[:Follows {createdOn: '2024-2-10'}]->(brainy),
(brainy)-[:Follows {createdOn: '2024-2-1'}]->(purplechalk),
(lionbower)-[:Follows {createdOn: '2024-5-3'}]->(purplechalk),
(brainy)-[:Joins {memberNo: 1}]->(c01),
(lionbower)-[:Joins {memberNo: 2}]->(c01),
(mochaeach)-[:Joins {memberNo: 9}]->(c02)
简单过滤
MATCH (c:Club)
FILTER c._id = "C01"
RETURN c
结果:c
_id | _uuid | schema | values |
---|---|---|---|
C01 | Sys-gen | Club | {since: 2005} |
使用笛卡尔积过滤
本条查询返回关注Brainy
且是C02
成员的用户:
MATCH (u1:User)-[:Follows]->(:User {name: "Brainy"})
MATCH (u2:User)-({_id: "C02"})
FILTER u1 = u2
RETURN u1
结果:u1
_id | _uuid | schema | values |
---|---|---|---|
U04 | Sys-gen | User | {name: "mochaeach"} |
请注意,在FILTER
语句过滤结果前,笛卡尔积已通过不同MATCH
语句在u1
和u2
间生成。