跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

FILTER

FILTER语句用于选择前一个语句生成的数据集的子集。FILTER语句的参数是一个布尔表达式,该表达式用于确定是否将数据传递到下一个语句。

语法

filter_statement
FILTER WHERE search_condition

filter_statement ::=
  'FILTER' 'WHERE'? search_condition

参数

search_condition

从上一个语句中提取子数据集的布尔值表达式。有关更多信息,请参见 WHERE 子句。

如果子数据集满足表达式结果,它将被传递到下一个语句。否则,它将被丢弃。

示例

以下示例基于示例数据集。

使用 WHERE 子句进行过滤

FOR i IN LIST[1, 2, 3] FILTER WHERE i > 2 RETURN i

返回:

+---+
| i |
+---+
| 3 |
+---+

不使用 WHERE 子句进行过滤

FOR i IN LIST[1, 2, 3] FILTER i > 2 RETURN i

返回:

+---+
| i |
+---+
| 3 |
+---+

过滤 MATCH 语句的结果

'''
USE movie 
MATCH (v:Person) FILTER v.birthDate > date("1990-01-20") 
RETURN v ORDER BY v.birthDate LIMIT 3
'''

返回:

+-------------------------------------------------------------------------------------+
| v                                                                                   |
+-------------------------------------------------------------------------------------+
| (288334086727008257@Actor:Person{birthDate:1990-01-30,id:9641,name:"Jake Thomas"})  |
| (288374798722007041@Actor:Person{birthDate:1990-04-15,id:10990,name:"Emma Watson"}) |
| (288488795743977473@Actor:Person{birthDate:1990-07-04,id:5847,name:"David Kross"})  |
+-------------------------------------------------------------------------------------+

过滤过程调用的结果

'''
CALL show_graphs() YIELD name 
FILTER name = "movie" 
RETURN *
'''

返回:

+-------+
| name  |
+-------+
| movie |
+-------+

聚合操作之前的过滤

'''
USE movie 
MATCH (v@Actor) FILTER v.birthDate > date("1995-01-20") 
RETURN count(v) AS count GROUP BY ()
'''

上述语句过滤出出生日期晚于 1995 年 1 月 20 日的演员,并统计这些演员的数量。

返回:

+-------+
| count |
+-------+
| 3     |
+-------+

聚合操作之后的过滤

由于聚合表达式通常在RETURN语句中使用,如果要在聚合操作之后执行过滤操作,必须使用关键字NEXT将结果传递到下一个语句。更多信息,请参见语句块。

'''
USE movie 
MATCH (v@Actor) 
RETURN count(v) AS count, v.birthDate AS birthDate GROUP BY birthDate 
NEXT 
USE movie 
FILTER birthDate > date("1995-01-20") 
RETURN count, birthDate
'''

上述语句首先统计每个出生日期的演员数量,然后过滤出出生日期晚于 1995 年 1 月 20 日的记录。

返回:

+-------+------------+
| count | birthDate  |
+-------+------------+
| 1     | 1997-07-17 |
| 1     | 1997-03-09 |
| 1     | 1998-01-12 |
+-------+------------+