Cypher 通识说明

2022-01-14  本文已影响0人  走在成长的道路上

Cypher 介绍

Cypher 类似 SQL 语言,也保留了些 SQL 关键词比如 WHEREORDER BY 等,而模式匹配则引入 SparQL 语法。

建立节点及构建关系

# 使用 CREATE 语句来创建节点并构建其间关联关系
CREATE (adam:User { name: 'Adam' }),(pernilla:User { name: 'Pernilla' }),(david:User { name: 'David'  }), (adam)-[:FRIEND]->(pernilla),(pernilla)-[:FRIEND]->(david)

查询语句

Cypher 关键信息属性说明如下:

因此,基础格式为 MATCH <图节点匹配逻辑> WHERE <节点数据匹配条件> RETURN <返回数据>,例如匹配 John 二度朋友的列表:

# 匹配 john 节点 :friend 关系 的节点的  :friend 关系 的节点 fof
MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof)
RETURN john.name, fof.name

# 过滤数据用户名称在指定范围内,且其名称符合 S.* 的数据列表
MATCH (user)-[:friend]->(follower)
WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
RETURN user.name, follower.name

# 聚合名字为 John 的朋友数量,输出节点及其数量,带分页
MATCH (n {name: 'John'})-[:FRIEND]-(friend)
WITH n, count(friend) as friendsCount
WHERE friendsCount > 3
RETURN n, friendsCount
SKIP 10
LIMIT 20

更新数据

使用 SET 语句来更新节点数据

# 聚合名字为 John 的朋友数量,更新节点中 friendCount 值,并输出数量
MATCH (n {name: 'John'})-[:FRIEND]-(friend)
WITH n, count(friend) as friendsCount
SET n.friendCount = friendsCount
# RETURN 语句可以省略
RETURN n.friendsCount

Cypher 语句例子

# 导入 movies 数据
LOAD CSV WITH HEADERS FROM "http://neo4j.com/docs/2.3.0/csv/query-tuning/movies.csv" AS line
# 与现有数据进行合并,合并条件为 MERGE 之后的节点描述模板
MERGE (m:Movie { title:line.title })
# 匹配到上述 merge 条件之后,对相应的节点创建更新属性信息
ON CREATE SET m.released = toInt(line.released), m.tagline = line.tagline

# 导入 actors 数据
LOAD CSV WITH HEADERS FROM 'http://neo4j.com/docs/2.3.0/csv/query-tuning/actors.csv' AS line
MATCH (m:Movie { title:line.title })
MERGE (p:Person { name:line.name })
ON CREATE SET p.born = toInt(line.born)
MERGE (p)-[:ACTED_IN { roles:split(line.roles,";")}]->(m)

# 导入 directors 数据
LOAD CSV WITH HEADERS FROM 'http://neo4j.com/docs/2.3.0/csv/query-tuning/directors.csv' AS line
MATCH (m:Movie { title:line.title })
MERGE (p:Person { name:line.name })
ON CREATE SET p.born = toInt(line.born)
MERGE (p)-[:DIRECTED]->(m)

# 调试
PROFILE
MATCH (p:Person { name:"Tom Hanks" })
RETURN p

MERGESQLUPDATE 类似,按条件更新节点数据,其后可接 ON CREATE SET(创建属性) 和 ON MATCH SET (更新属性),例如:

# 合并条件为 名为 Keanu Reeves 的 Person
MERGE (keanu:Person { name:'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, keanu.created, keanu.lastSeen

删除数据

# 删除节点
MATCH (n:Useless)
DELETE n

# 删除关系
MATCH ()-[r:RELEASED]-() 
DELETE r

# 删除节点及其关系
MATCH (n { name:'Andres' })
DETACH DELETE n

# 删除属性
MATCH (andres { name: 'Andres' })
REMOVE andres.age
RETURN andres

参考

上一篇下一篇

猜你喜欢

热点阅读