目录: [TOC]
值和类型 Values and types
- 属性类型 Property types
- 结构类型 Structural types
- 组合类型 Composite types
属性类型
- 可以用于返回
- 可以用于参数
- 可以存储为属性
- 可以和常量组合
属性类型有:
- 数值类型 Nmubei
- 字符串 String
- 布尔类型 Boolean
- 点的空间类型spatial type
- 时间类型 temporal
结构类型
- 能够被Cypher query
- 不能作为参数
- 不能被存储为属性
- 不能和常量组合
结构类型有:
- Nodes:
- id
- Labal
- Map
- Relationships:
- id
- Type
- Map
- Id of the start and end nodes
- Paths:
- An alternating sequence of nodes and relationships
组合类型
- 能被Cypher返回
- 能作为参数
- 不能被存储为属性
- 可以和常量组合
组合类型有:
- List
- Map
- the key is a String
- the value has any property, structural or composite type
- Composite values can also contain null
命名规则和建议命名规范 Naming rules and recommendations
命名规范
- 字母
- 数字:开头不应该是数字
- 长度:小于65535个字符
- 命名要有意义
- 大小写敏感
- 空白字符:空白字符将被移除
推荐命名规范
- 节点和标签:驼峰格式 Camel-case,例如:
:VehicleOwner rather than :vehicle_owner etc.
- 关系类型:大写并使用下划线分割,例如:
:OWNS_VEHICLE rather than :ownsVehicle etc.
表达式 Expressions
一般表达式
- 小数:例如:
13, -40000, 3.14, 6.022E23
- 十六进制整数:
0x13af, 0xFC3A9, -0x66eff
- 八进制整数:
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§, nodes§
- 聚合函数:avg(x.prop), count(*)
- 路径模式path-pattern:
(a)-->()<--(b)
- 算子:1 + 2 and 3 < 4
- 判断表达式:
a.prop = 'Hello', length(p) > 10, exists(a.name)
- 是否存在的子查询:
EXISTS { MATCH (n)-[r]→(p) WHERE p.name = 'Sven' }
- 正则表达式:
a.name =~ 'Tim.*'
- 大小写敏感:
a.surname STARTS WITH 'Sven', a.surname ENDS WITH 'son' or a.surname CONTAINS 'son'
- case expression
case expression
case结构的条件表达式
简单的case形式,一个表达式多个变量
语法
CASE test
WHEN value THEN result
[WHEN ...]
[ELSE default]END
例如:
MATCH (n)
RETURN
CASE n.eyes
WHEN 'blue'
THEN 1
WHEN 'brown'
THEN 2
ELSE 3 END AS resul
结果tresult
5 rows
2
1
3
2
1
一般的case形式,多个表达式多个变量
语法:
CASE
WHEN predicate THEN result
[WHEN ...]
[ELSE default]
END
例如
MATCH (n)
RETURN
CASE
WHEN n.eyes = 'blue'
THEN 1
WHEN n.age < 40
THEN 2
ELSE 3 END AS result
result
5 rows
2
1
3
3
1
区分简单case和一般的case形式
例如:
MATCH (n)
RETURN n.name,
CASE n.age
WHEN n.age IS NULL THEN -1
ELSE n.age - 10 END AS age_10_years_ago
结果:
Daniel 的结果并不是-1,
作为简单case 形式,Daniel应该事-1,
实际上, n.age
是整形,而n.age IS NULL
是布尔类型,所以n.age IS NULL THEN -1
根本不会执行
正确写法:
MATCH (n)
RETURN n.name,
CASE
WHEN n.age IS NULL THEN -1
ELSE n.age - 10 END AS age_10_years_ago
参数 Parameters
Cypher支持参数查询,开发者就不用在在一个query中重新存储字符串,由于参数做了缓存,所以执行效率更高。 参数能够用于:
- 常量和表达式
- 节点关系的id
参数不能用于结构:
- 属性的key:如MATCH (n) WHERE n.$param = 'something’是无效的
- 关系的类型
- 标签
字符串常量
参数:
{
"name" : "Johan"
}
查询:
MATCH (n:Person)
WHERE n.name = $name
RETURN n
MATCH (n:Person { name: $name })
RETURN n
正则表达式
参数:
{
"regex" : ".*h.*"
}
查询:
MATCH (n:Person)
WHERE n.name =~ $regex
RETURN n.name
大小写敏感字符串匹配
参数:
{
"name" : "Michael"
}
查询:
MATCH (n:Person)
WHERE n.name STARTS WITH $name
RETURN n.name
创建带属性的节点
参数:
{
"props" : {
"name" : "Andy",
"position" : "Developer"
}
}
查询:
CREATE ($props)
创建多个带属性的节点
参数:
{
"props" : [ {
"awesome" : true,
"name" : "Andy",
"position" : "Developer"
}, {
"children" : 3,
"name" : "Michael",
"position" : "Developer"
} ]
}
查询:
UNWIND $props AS properties
CREATE (n:Person)
SET n = properties
RETURN n
设置节点的属性
参数
{
"props" : {
"name" : "Andy",
"position" : "Developer"
}
}
查询:
MATCH (n:Person)
WHERE n.name='Michaela'
SET n = $props
- 这个操作会替换原有的属性
SKIP and LIMIT
参数:
{
"s" : 1,
"l" : 1
}
查询:
MATCH (n:Person)
RETURN n.name
SKIP $s
LIMIT $l
Node id
参数
{
"id" : 0
}
查询:
MATCH (n)
WHERE id(n)= $id
RETURN n.name
多个节点id
参数:
{
"ids" : [ 0, 1, 2 ]
}
查询:
MATCH (n)
WHERE id(n) IN $ids
RETURN n.name
调用程序
参数
{
"indexname" : "My index"
}
查询:
CALL db.resampleIndex($indexname)
本文使用 文章同步助手 同步
网友评论