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
上一篇下一篇

猜你喜欢

热点阅读