Neo4j-Cypher
2019-06-27 本文已影响0人
L_bd7d
Cyper是什么
Cyper是一种声明式图数据查询语言
1、获取图语句
MATCH:匹配图模式
WHERE:MATCH、OPTIONAL MATCH、WITH 的一部分,用于添加约束、过滤传递给WITH的中间结果
RETURN:返回结果
2、更新图语句
CREATE/DELETE:创建/删除节点
SET/REMOVE: SET 设计属性值和给节点添加标签,REMOVE移除
MERGE:匹配已存在的或者创建新节点和模式
一、节点语法
cypher采用圆括号表示节点,常见表示方法如下:
()
(matrix)
(:Movie)
(matrix:Movie)
(matrix:Movie {title:'Kungfo'})
(matrix:MOvie {title:'Kungfo', released:1980})
简单的()表示匿名节点,引用可添加变量名,如(matrix)。Movie标签声明了节点类型,Neo4j节点索引也会使用到标签,每个索引都是建立在一个标签和属性的组合上。节点属性以key/value列表形式存在,并外加一对大括号,属性可以存储信息和限制模式。
二、关系语法
-->
-[role]->
-[:acted_in]->
-[role:acted_in]->
-[role:acted_in {roles:['zhouxingchi']}]->
-表示无方向的关系,->表示有方向的关系,[]用于添加详情,里面可以包含变量、属性和类型信息。
三、模式语法
将节点和关系的语法组合在一起可以表达模式。
(xingye:Person:Actor {name:'zhouxingchi'})-[role:atced_in {roles:['Neo']}]
->(matrix:Movie {title:'Kungfo'})
五、模式变量
将模式赋给变量
acted_in = (:Person)-[acted_in]->(:Movie)
查询和跟新图
1、更新语句的结构
Cypher查询部分不能同时匹配和更新。
如果查询只读取,采用惰性加载,返回时才实际匹配;更新时,读取操作必须在写之前完成。
使用聚合数据过滤时,必须使用with将两个读语句连接在一起,第一部分做聚合,第二部分过滤一的结果。
MATCH (n {name:'zhouxingchi'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendCount
WHERE friendCount > 3
RETURN n, friendCount
下面将数据更新到图中:
MATCH (n {name:'zhouxingchi'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendCount
SET n.friendCount = friendCount
RETURN n, friendCOunt
2、返回数据
RETURN 有三个子语句, SKIP、LIMIT、ORDER BY
事务
1、唯一性
当进行模式匹配时,Neo4j确保单个模式中,不会包含匹配到多次的同一个图关系。
MATCH (user:User {name:'Adam'}) - [r1:FRIEND] - () - [r2:FRIEND] - (friend2friend)
RETURN friend2friend.name AS f2fName
如需返回该用户,使用多个MATCH语句实现:
MATCH (user:User {name:'Adam'}) - [r1:FRIEND] - (friend)
MATCH (friend) - [r2:FRIEND] - (friend2friend)
RETURN friend2friend.name AS f2fName