一、类型
Cypher处理的所有值都有一个特定的类型,它支持如下类型:
- 数值型
- 字符串
- 布尔型
- 节点
- 关系
- 路径
- 映射(Map)
- 列表(List)
二、表达式
Cypher中的表达式如下:
- 十进制(整型和双精度型)的字面值:13, -4000, 3.14, 6.022E23
- 十六进制整型字面值(以0x开头):0x13zf, 0xFC3A9, -0x66eff
- 八进制整型字面值(以0开头):01372, 02127, -05671
- 字符串字面值:'Hello', "World"
- 布尔字面值:true, false, TRUE, FALSE
- 变量:n, x, rel, myFancyVariable, `A name with weird stuff in it[]!`
- 属性:n.prop, x.prop, rel.thisProperty, myFancyVariable. `(weird property name)`
- 动态属性:n["prop"], rel[n.city + n.zip], map[coll[0]]
- 参数:$param, $0
- 表达式列表:['a', 'b'], [1, 2, 3], ['a', 2, n.property, $param], [ ]
- 函数调用:length(p), nodes(p)
- 聚合函数:avg(x.prop), count(*)
- 路径-模式:(a)-->()<--(b)
- 计算式:1 + 2 >3 and 3 < 4.
- 返回true或者false的断言表达式:a.prop = 'Hello', length(p) >10, exists(a.name)
- 正则表达式:a.name =~ 'Tob.*'
- 大小写敏感的字符串匹配表达式:a.surname STARTS WITH 'Sven', a.surname ENDS WITH 'son' or a.surname CONTAINS 'son'
- CASE表达式
三、参数
Cypher支持带参数的查询。这意味着开发人员不是必须用字符串来构建查询。此外,这也让执行计划的缓存更容易。
参数能够用于WHERE语句中的字面值和表达式,START语句中的索引值,索引查询以及节点和关系的id。参数不能用于属性名、关系类型和标签,因为这些模式(pattern)将作为查询结构的一部分被编译进查询计划。
合法的参数名是字母,数字以及两者的组合。下面是一个使用参数的完整例子。参数以JSON格式提供。具体如何提交它们取决于所使用驱动程序。
{ "name" : "Johan" } |
Match (n) where n.name=$name return n
四、运算符
1、数学运算符
包括+,-,*,/ 和%,^。
2、比较运算符
包括=,<>,<,>,<=,>=,IS NULL和IS NOT NULL。
3、布尔运算符
包括AND,OR,XOR和NOT。
4、字符串运算符
连接字符串的运算符为+。正则表达式的匹配运算符为=~。
5、列表运算符
列表的连接也可以通过+运算符。可以用IN来检查列表中是否存在某个元素。
6、值的相等与比较
Cypher支持使用=和<>来比较两个值的相等/不相等关系。同类型的值只有它们是同一个值的时候才相等,如3 = 3和"x" <> "xy"。
7、值的排序与比较
比较运算符<=,<(升序)和>=,>(降序)可以用于值排序的比较。如下所示:
- 数字型值的排序比较采用数字顺序
- java.lang.Double.NaN大于所有值
- 字符串排序的比较采用字典顺序。如"x" < "xy"
- 布尔值的排序遵循false < true
- 当有个参数为null的时候,比较结果为null。如null < 3的结果为null
- 将其他类型的值相互比较进行排序将报错
8、链式比较运算
比较运算可以被任意地链在一起。如x < y <= z等价于x < y AND y <= z。如:
MATCH (n) WHERE 21 < n.age <= 30 RETURN n |
等价于
MATCH (n) WHERE 21 < n.age AND n.age <= 30 RETURN n |