FILTER¶
FILTER语句用于选择前一个语句生成的数据集的子集。FILTER语句的参数是一个布尔表达式,该表达式用于确定是否将数据传递到下一个语句。
语法¶
- filter_statement
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 |
+-------+------------+