cyhper是什么?
cyhper是neo4j图数据库的执行语言,类似于mysql、Oracle这类关系型数据库都具备sql语言执行能力,而neo4j与cyhper的关系就像是mysql与sql的关系
cyhper能做什么?
Cypher语句可以查询节点、关系、标签和属性,支持关系查询、统计、汇总操作
Cypher语句可以对节点、关系、标签和属性进行创建、更新和删除操作。
Cypher语句可以管理索引和约束。
cyhper主要命令
(此处仅代表本人常用命令,其他命令请详阅官方文档)
- CREATE:创建节点,关系和属性
- DELETE:删除节点和关系
- SET:添加或更新标签
- MATCH:检索有关节点,关系和属性数据
- WHERE:提供条件过滤检索数据
- RETURN:返回查询结果
cyhper 使用图解
-
CREATE 创建
说明:CREATE (a:test),代表创建一个节点test,无属性
说明: create (a : pig {name :“佩奇”}),代表创建一个节点,有一个name的属性,属性的值是:佩奇
说明: create (a : pig {name :“乔治”}) create (b : pig {name :“猪爸爸”}) create (a) - [:父子] -> (b),代表创建两个节点,各有一个name属性,再创建一个关系,a(乔治)与b(猪爸爸)的关系是父子关系 -
MATCH 查询
说明: MATCH (n:pig) RETURN n,代表查询pig节点的所有数据,将查询结果赋值给n,RETURN关键字代表返回n的数据给前端
说明:MATCH (n:pig{name:“乔治”}) RETURN n,代表查询乔治的数据
说明:MATCH (n:pig) where n.name=“乔治” RETURN n,效果同上
说明:MATCH p =((a:pig{name:“乔治”}) - [r] -> (b:pig{name:“猪妈妈”})) return p,代表查询乔治和猪妈妈的关系 -
SET 修改或新增节点属性
说明:MATCH (n:pig{name:“乔治”}) set n.age=3 return n,代表查询出乔治的节点,修改age属性为3,并返回 -
DELETE 删除节点或关系
说明:MATCH (n:pig{name:“佩奇”}) - [r] - () delete r,代表查询出佩奇的所有关系,赋值给r,最终删除r
说明:MATCH (n:pig{name:“佩奇”}) delete n,代表查询出佩奇的节点,赋值给n,最终删除n
cyhper字符串函数
- UPPER 用于将所有字母更改为大写字母
MATCH (n:pig) return UPPER(n.title) - LOWER 用于将所有字母改为小写字母
MATCH (n:pig) return LOWER(n.title) - SUBSTRING 用于获取给定String的子字符串
MATCH (n:pig) return SUBSTRING (n.title, 0,1) - REPLACE 用于替换一个字符串的子字符串
MATCH (n:pig) return REPLACE(n.title, “a”,“b”)
cyhper 聚合
- COUNT 返回由MATCH命令返回的行数
示例:MATCH (n:pig) return count(n) - MAX 从MATCH命令返回的一组行返回最大值
示例:MATCH (n:pig) return max(n.age) - MIN 返回由MATCH命令返回的一组行的最小值
示例:MATCH (n:pig) return min(n.age) - SUM 返回由MATCH命令返回的所有行的求和值
示例:MATCH (n:pig) return sum(n.age) - AVG 返回由MATCH命令返回的所有行的平均值
示例:MATCH (n:pig) return avg(n.age)
总结
cyhper语言最开始使用还是有很多要注意的地方,一不小心就写错了,所以还是要细心一点。
cyhper语言是一种很灵活的语言,上面介绍只是比较常规的操作,下面是个人比较喜欢的一些编写风格,可以参考一下:
- 创建3个节点,并将两个节点创建关系
CREATE (a:Sheeps{name:“喜羊羊”}) CREATE (b:Sheeps{name:“美羊羊”}) CREATE (c:Sheeps{name:“沸羊羊”}) CREATE (a) - [:兄弟] -> (b) - 查询与乔治有关系的所有节点
MATCH p =((a:pig{name:“乔治”}) - [r] -> ()) return p - 查询与乔治有关系的10个节点
MATCH p =((a:pig{name:“乔治”}) - [r] -> ()) return p limit 10 - 查找乔治与猪妈妈的关系,查询深度为5,查到则返回,没有查到则中断
MATCH p =((a:pig{name:“乔治”}) - [*…5] -> (b:pig{name:“猪妈妈”})) return p - 查询乔治与猪妈妈深度10以内查找所有存在的关系中的最短路径关系
MATCH p =shortestpath((a:pig{name:“乔治”}) - [*…5] -> (b:pig{name:“猪妈妈”})) return p