美文网首页
Cypher 通识说明

Cypher 通识说明

作者: 走在成长的道路上 | 来源:发表于2022-01-14 11:52 被阅读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 表示图匹配模式,其中 () 表示节点,{} 表示节点中的属性值, [] 表示关联关系 -> 表示关系方向 - 表示有关联关系;其中 WITH 可接聚合相关的数据内容
  • WHERE 表示字段数据匹配条件
  • RETURN 表示返回数据

因此,基础格式为 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

参考

相关文章

  • Cypher 通识说明

    Cypher 介绍 Cypher 类似 SQL 语言,也保留了些 SQL 关键词比如 WHERE、ORDER BY...

  • RDF 通识说明

    RDF 定义 R 代表 Resource,即资源,任何可以被唯一标识的对象,都可以称为资源。例如,网页、地点、人、...

  • 一个通识书单40+

    通识书单 说明 依照通识教育的目的,针对普通读者尤其是成年人。 不包括文学作品 分享 基于 BitTorrent ...

  • 通识

  • 通识

    最近迷上了养花,密集两周都在学习养花的知识。 今天学到两个知识特别有趣,也颇有感悟。和大家分享一下。 一 刚买回来...

  • 通识

    现代社会的发展瞬息万变、难以预测,如果一个人只钻研某一个特定的学科领域的话,很有可能会难以发挥价值,迅速被时代淘汰...

  • 通识

    能打通学科的藩篱,披沙拣金,不再是“我注六经”,而是“六经注我”,不是我去臣服于别人的观点,而是让书里的观点为我所...

  • Neo4j之Cypher学习总结

    Cypher 语句 Cypher是图形数据库Neo4j的声明式查询语言。Cypher语句规则和具备的能力:Cyph...

  • 20190530 五月总结

    已读书目: 《寂寞之井》 《牛津通识读本:政治哲学与幸福根基》 《牛津通识读本:尼采》 《牛津通识读本:亚里士多德...

  • Neo4j -- Cypher基础

    Cypher: Cypher是一种声明式描述性的图查询语言,能够实现简单高效的查询和更新图形数据库。Cypher语...

网友评论

      本文标题:Cypher 通识说明

      本文链接:https://www.haomeiwen.com/subject/iqhacrtx.html