neo4j Cypher 基础知识

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 读取数据

使用的数据模型

neo4j Cypher 基础知识_第1张图片

Cypher 简介

什么是 Cypher?

Cypher 是一种专为图形设计的查询语言。

  • 节点由 括号 ()表示。
  • 我们使用冒号来表示标签,例如(:Person) .
  • 节点之间的关系用两个短划线表示,例如(:Person)--(:Movie) .
  • 关系的方向使用大于或小于符号<> 表示,例如(:Person)-→(:Movie)
  • 关系的类型使用两个短划线之间的方括号表示:[] ,例如[:ACTED_IN]
  • 对话气泡中绘制的属性以类似 JSON 的语法指定。
    • Neo4j 中的属性是键/值对,例如{name: 'Tom Hanks'} .
// example Cypher pattern
(m:Movie {title: 'Cloud Atlas'})<-[:ACTED_IN]-(p:Person)

此模式中的两种节点类型是 MoviePersonPerson 节点与 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

我们可以使用大括号来指定 nameTom 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作的所有 TelevisionMovie 节点。 也就是说,如果我们在图表中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子句中的节点标签:

 
 

你可能感兴趣的:(数据库,neo4j)