精通Neo4j
上QQ阅读APP看书,第一时间看更新

3.2.5 运算符

3.2.5.1 数学运算符

数学运算符包括+、-、*、/、%和^。

3.2.5.2 比较运算符

比较运算符包括=、<>、<、>、<=、>=、IS NULL和IS NOT NULL。

3.2.5.3 布尔运算符

布尔运算符包括AND、OR、XOR和NOT。

3.2.5.4 字符串运算符

连接字符串的运算符为+,正则表达式的匹配运算符为=~。

3.2.5.5 列表运算符

列表的连接也可以通过+运算符,可以用IN来检查列表中是否存在某个元素。

3.2.5.6 属性运算符

Cypher 2.0版本以后,之前存在的属性运算符“?”和“!”已经被移除了。这个语法不再支持。对于不存在的属性将返回null。如果真的还需要?运算符的功能,可以使用(NOT(has(<ident>.prop))OR <ident>.prop=<value>)。使用“? ”表达可选关系也被移除了,取而代之的是OPTINAL MATCH。

3.2.5.7 值的相等与比较

Cypher支持使用=和<>来比较两个值的相等/不相等关系,如3 = 3和"x" <> "xy"。

对于Map来说,只有两个Map的键相同且指向的值也相等的时候它们才相等。对于列表来说,只有它们包含相等值的相同序列的时候才相等,如[3, 4] = [1+2, 8/2]。

不同类型的值在比较相等的时候遵循以下规则:

● 路径可看作是一些节点和关系的列表,它等于所有包含相同序列节点和关系的所有列表。

● 对任何值使用=和<> null都将返回null,包括null = null和null <> null都将返回null。唯一可靠地测试一个值是否为null的方法是使用IS NULL或者IS NOT NULL。

不同类型之间不能相互比较。节点、关系和映射之间也不能相互比较。

3.2.5.8 值的排序与比较

比较运算符<=、<(升序)和>=、>(降序)可以用于如下值排序比较:

● 数字型值的排序比较采用数字顺序。

● java.lang.Double.NaN大于所有值。

● 字符串排序的比较采用字典顺序,如"x" < "xy"。

● 布尔值的排序遵循false < true。

● 只要有一个参数为null,比较结果都将为null,如null < 3的结果为null。

● 将其他类型的值相互比较进行排序,则会报错。

3.2.5.9 链式比较运算

比较运算可以被任意地联结在一起,如x < y <= z等价于x < y AND y <= z。

如果a, b, c, …, y, z是表达式,op1, op2, …, opN是比较运算符,这时,a op1 b op2 c … y opN z等价于a op1 b and b op2 c and … y opN z。

例如:

等价于:

该查询将匹配年龄介于21~30的所有节点。