类型谓词表达式
类型谓词表达式可用于验证变量、文字、属性或其他 Cypher® 表达式的类型。
语法
<expr> IS :: <TYPE>
其中 <expr>
是任何 Cypher 表达式,而 <TYPE>
是 Cypher 类型。有关所有可用的 Cypher 类型,请参阅有关 类型及其同义词 的部分。
验证 Cypher 表达式的类型
UNWIND [42, true, 'abc', null] AS val
RETURN val, val IS :: INTEGER AS isInteger
val | isInteger |
---|---|
|
|
|
|
|
|
|
|
行数:4 |
使用 NOT 的类型谓词表达式
也可以使用否定类型谓词表达式 IS NOT ::
来验证 Cypher 表达式是否不是特定类型。
UNWIND [42, true, 'abc', null] AS val
RETURN val, val IS NOT :: STRING AS notString
val | notString |
---|---|
|
|
|
|
|
|
|
|
行数:4 |
类型谓词表达式用于 null
所有 Cypher 类型都包含 null
值。从 Neo4j 5.10 开始,类型谓词表达式可以附加 NOT NULL
。这意味着 IS ::
对所有计算结果为 null
的表达式返回 true
,除非附加了 NOT NULL
。
RETURN
null IS :: BOOLEAN AS isBoolean,
null IS :: BOOLEAN NOT NULL AS isNotNullBoolean
isBoolean | isNotNullBoolean |
---|---|
|
|
行数:1 |
同样,IS NOT ::
对所有计算结果为 null
的表达式返回 false
,除非类型附加了 NOT NULL
。
RETURN
(null + 1) IS NOT :: DATE AS isNotDate,
(null + 1) IS NOT :: DATE NOT NULL AS isNotNotNullDate
isNotDate | isNotNotNullDate |
---|---|
|
|
行数:1 |
也可以使用 NULL
类型来检查值是否只是 null
值。
RETURN null IS :: NULL AS isNull
isNull |
---|
|
行数:1 |
封闭动态联合类型 (INNER_TYPE_1 | INNER_TYPE_2…
) 无法声明为 NOT NULL
。相反,所有内部类型都应该分别声明为不可为空以实现这种行为。
请注意,封闭动态联合中的所有内部类型必须是可为空的,或者不可为空的。这是因为 null
值不能归因于特定类型。如果内部类型不是相同可空性,则会引发语法错误。
RETURN 1 IS :: INTEGER NOT NULL | FLOAT
All types in a Closed Dynamic Union must be nullable, or be appended with `NOT NULL`.
属性的类型谓词表达式
类型谓词表达式也可用于筛选具有特定类型属性的节点或关系。
以下示例使用包含以下节点的图:
以下查询查找所有 Person
节点,其 age
属性为 INTEGER
,且值大于 18
。
MATCH (n:Person)
WHERE n.age IS :: INTEGER AND n.age > 18
RETURN n.name AS name, n.age AS age
name | age |
---|---|
|
|
行数:1 |
类型 PROPERTY VALUE
也可用于检查类型是否可存储为属性。不可存储在属性中的类型(例如 MAP
)在使用 IS :: PROPERTY VALUE
检查时将返回 false
。
类型谓词表达式的语法变体
类型谓词表达式允许使用一些替代语法
<expr> IS TYPED <TYPE>
<expr> :: <TYPE>
要验证表达式是否不是特定类型,支持以下替代语法
<expr> IS NOT TYPED <TYPE>
ANY
和 NOTHING
类型的使用
ANY
是一个超类型,它匹配所有类型的值。NOTHING
是一个包含空值集的类型。这意味着它对所有值返回 false
。
RETURN 42 IS :: ANY AS isOfTypeAny, 42 IS :: NOTHING AS isOfTypeNothing
isOfTypeAny | isOfTypeNothing |
---|---|
|
|
行数:1 |
封闭动态联合
封闭动态联合类型允许在同一谓词中测试多种类型。
UNWIND [42, 42.0, "42"] as val
RETURN val, val IS :: INTEGER | FLOAT AS isNumber
val | isNumber |
---|---|
|
|
|
|
|
|
行数:3 |
列表类型
类型谓词表达式可用于 LIST
类型,其中必须指定列表中元素的内部类型。如果内部类型不相关,则可以使用 ANY
类型。
要使 LIST
类型检查返回 true
,列表中的所有值都必须匹配内部类型。
UNWIND [[42], [42, null], [42, 42.0]] as val
RETURN val, val IS :: LIST<INTEGER> AS isIntList
val | isIntList |
---|---|
|
|
|
|
|
|
行数:3 |
空列表将匹配所有内部类型,即使是 NOTHING
类型。
RETURN
[] IS :: LIST<NOTHING> AS isNothingList,
[] IS :: LIST<INTEGER> AS isIntList,
[] IS :: LIST<FLOAT NOT NULL> AS isFloatNotNullList
isNothingList | isIntList | isFloatNotNullList |
---|---|---|
|
|
|
行数:1 |
列表可以与封闭动态联合类型组合以创建对异构列表的测试。
WITH [1, 0, true, false] AS booleanList
RETURN booleanList IS :: LIST<BOOLEAN | INTEGER> as isMixedList
isMixedList |
---|
|
行数:1 |