Cypher 基础知识
- 从 Neo4j 读取数据
- 使用的数据模型
- Cypher 简介
- 什么是 Cypher?
- Cypher 的工作原理
- 检索节点
- 查找关系
- 遍历关系
- 寻找 Emil
- 筛选查询
- 按节点标签筛选
- 使用范围进行筛选
- 按是否存在属性进行筛选
- 按部分字符串筛选
- 按图形中的模式筛选
- 使用列表进行筛选
- 节点或关系具有哪些属性?
- 图中存在哪些属性?
- 查找特定参与者
- 向 Neo4j 写入数据
- 创建节点
- 执行多个 Cypher 子句
- Using 而不是 to create nodes`CREATE` `MERGE`
- 创建关系
- 在两个节点之间创建关系
- 使用多个子句创建节点和关系
- `MERGE`用于在单个子句中创建节点和关系
- 在 Daniel Kaluuya 和电影《逃出绝命镇》之间建立ACTED_IN关系
- 更新属性
- 为节点或关系添加属性
- 1. 内联作为`MERGE`子句的一部分
- 2. 使用`SET`关键字引用节点或关系
- 设置多个属性
- 更新属性
- 删除属性
- 向影片添加属性
- 合并处理
- `MERGE`自定义行为
- 与关系合并
- 删除数据
- 删除节点
- 删除关系
- 删除节点及其关系
- 删除标签
原文链接: Cypher 基础知识
从 Neo4j 读取数据
使用的数据模型
Cypher 简介
什么是 Cypher?
Cypher 是一种专为图形设计的查询语言。
- 节点由 括号
()
表示。 - 我们使用冒号来表示标签,例如
(:Person)
. - 节点之间的关系用两个短划线表示,例如
(:Person)--(:Movie)
. - 关系的方向使用大于或小于符号
<
或>
表示,例如(:Person)-→(:Movie)
。 - 关系的类型使用两个短划线之间的方括号表示:
[
和]
,例如[:ACTED_IN]
- 在对话气泡中绘制的属性以类似 JSON 的语法指定。
- Neo4j 中的属性是键/值对,例如
{name: 'Tom Hanks'}
.
- Neo4j 中的属性是键/值对,例如
// example Cypher pattern
(m:Movie {title: 'Cloud Atlas'})<-[:ACTED_IN]-(p:Person)
此模式中的两种节点类型是 Movie 和 Person。 Person 节点与 Movie 节点具有ACTED_IN关系。 此模式中的特定 Movie 节点按 title 属性进行筛选,其值为 Cloud Atlas。 所以这个模式代表了图中所有在电影 Cloud Atlas 中表演的人。
Cypher 的工作原理
Cypher 的工作原理是匹配数据中的模式。 我们使用关键字MATCH
从图表中检索数据。 您可以将MATCH
子句视为类似于 SQL 语句中的 FROM 子句。
例如,如果我们要在图形中查找 Person,我们将采用MATCH
标签为:Person
- 且前缀为冒号:
的单个节点的模式 。
MATCH (:Person)
// incomplete MATCH clause because we need to return something
假设我们想从图中检索所有 Person 节点。我们可以通过在冒号前放置一个值来分配一个变量p
。 让我们使用变量p
。现在,它表示从图形中检索到的所有 Person 节点,我们可以使用RETURN
子句返回它们。
MATCH (p:Person)
RETURN p
我们可以使用大括号来指定 name 和 Tom Hanks 的键/值对作为过滤器。 由于 Tom Hanks 是一个字符串,我们需要将其放在单引号或双引号内。{..}
// 在我们的 Cypher 语句中,我们可以使用点表示法访问属性。 例如,要使用 name 属性值 property key 返回其 property key 。p.name
MATCH (p:Person {name: 'Tom Hanks'})
RETURN p
// RETURN p.born 返回年份
筛选查询的另一种方法是使用WHERE
子句,而不是使用大括号内联指定属性值。
此查询返回与上一个查询相同的数据。
MATCH (p:Person)
WHERE p.name = 'Tom Hanks'
RETURN p.born
此查询返回两个姓名及其关联的出生年份。
MATCH (p:Person)
WHERE p.name = 'Tom Hanks' OR p.name = 'Rita Wilson'
RETURN p.name, p.born
检索节点
MATCH (p:Person {name: "?????"})
RETURN p.?????
查找关系
我们可以扩展MATCH
子句中的模式,以遍历具有 ACTED_IN 类型的所有关系到任何节点。 我们的域模型显示,ACTED_IN关系从 Person 节点向外方向发展,因此我们可以在模式中添加方向。 我们通常将其称为遍历。
我们的数据模型规定该关系另一端的节点将是 Movie 节点,因此我们不一定需要在节点中指定 :Movie 标签 - 而是使用变量 m。
MATCH (p:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m)
RETURN m.title
如果我们的图表具有不同的标签,例如 Television 和 Movie 节点,则此查询将返回 Tom Hanks作的所有 Television 和 Movie 节点。 也就是说,如果我们在图表中ACTED_IN关系的末尾有多种类型的节点,我们可以确保只返回电影。
MATCH (p:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie)
RETURN m.title
由于我们的图表仅包含具有传入 ACTED_IN 关系的 Movie 节点,因此此查询返回与上一个查询完全相同的结果。
遍历关系
您可以使用以下查询来查找谁指导了 Cloud Atlas:
//MATCH (m:Movie {title: "Cloud Atlas"})<-[:?????]-(p:?????)
//RETURN p.?????
MATCH (m:Movie {title: "Cloud Atlas"} )<-[:DIRECTED]-(p:Person)
RETURN p.name
寻找 Emil
您可以使用以下查询查找 Emil 被列为表演的 Movie 的标题。
//MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
//RETURN m.title
MATCH (p:Person {name: "Emil Eifrem"})-[:ACTED_IN]->(m:Movie)
RETURN m.title
筛选查询
例如,此查询检索 Person 节点和 Movie 节点,其中的人员在 2008 年或 2009 年上映的电影中出演:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE m.released = 2008 OR m.released = 2009
RETURN p, m
按节点标签筛选
您已经看到了这种类型的查询。它返回在电影 The Matrix 中表演的所有人员的姓名。
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE m.title='The Matrix'
RETURN p.name
此查询的替代方法是以下查询,我们在其中测试WHERE
子句中的节点标签: