Neo4j - 快速指南


Neo4j - 概述

Neo4j是世界领先的开源图数据库,采用Java技术开发。它具有高度可扩展性和无模式(NoSQL)。

什么是图数据库?

图表是一组对象的图形表示,其中一些对象对通过链接连接。它由两个元素组成——节点(顶点)和关系(边)。

图数据库是用于以图的形式对数据进行建模的数据库。在这里,图的节点描述实体,而关系描述这些节点的关联。

流行的图数据库

Neo4j 是一种流行的图数据库。其他图形数据库包括 Oracle NoSQL 数据库、OrientDB、HypherGraphDB、GraphBase、InfiniteGraph 和 AllegroGraph。

为什么选择图数据库?

如今,大多数数据以不同对象之间的关系的形式存在,而且更多时候,数据之间的关系比数据本身更有价值。

关系数据库存储高度结构化的数据,其中有多个记录存储相同类型的数据,因此它们可用于存储结构化数据,但它们不存储数据之间的关系。

与其他数据库不同,图数据库将关系和连接存储为一流实体。

与其他数据库相比,图数据库的数据模型更简单,并且可以与 OLTP 系统一起使用。它们提供事务完整性和操作可用性等功能。

RDBMS 与图数据库

下表是关系数据库和图数据库的比较。

先生编号 关系型数据库管理系统 图数据库
1 表格 图表
2 行数 节点
3 列和数据 属性及其值
4 约束条件 人际关系
5 加入 遍历

Neo4j的优点

以下是 Neo4j 的优点。

  • 灵活的数据模型- Neo4j 提供了灵活简单但功能强大的数据模型,可以根据应用程序和行业轻松更改。

  • 实时洞察- Neo4j 提供基于实时数据的结果。

  • 高可用性- Neo4j 对于具有事务保证的大型企业实时应用程序具有高度可用性。

  • 连接和半结构化数据- 使用 Neo4j,您可以轻松表示连接和半结构化数据。

  • 轻松检索- 与其他数据库相比,使用 Neo4j,您不仅可以表示,还可以更快地轻松检索(遍历/导航)连接的数据。

  • Cypher 查询语言- Neo4j 提供了一种声明性查询语言,使用 ascii-art 语法直观地表示图形。这种语言的命令是人类可读的格式,非常容易学习。

  • 无连接- 使用 Neo4j,不需要复杂的连接来检索连接/相关数据,因为无需连接或索引即可轻松检索其相邻节点或关系详细信息。

Neo4j 的特点

以下是 Neo4j 的显着特征 -

  • 数据模型(灵活的模式) - Neo4j 遵循名为本机属性图模型的数据模型。这里,图包含节点(实体),并且这些节点彼此连接(通过关系来描述)。节点和关系将数据存储在称为属性的键值对中。

    在 Neo4j 中,不需要遵循固定的模式。您可以根据需要添加或删除属性。它还提供模式约束。

  • ACID 属性- Neo4j 支持完整的 ACID(Atomics性、一致性、隔离性和持久性)规则。

  • 可扩展性和可靠性- 您可以通过增加读/写次数和卷来扩展数据库,而不会影响查询处理速度和数据完整性。Neo4j 还提供对复制的支持,以确保数据安全性和可靠性。

  • Cypher 查询语言- Neo4j 提供了一种强大的声明性查询语言,称为 Cypher。它使用 ASCII-art 来描绘图形。Cypher 易于学习,可用于创建和检索数据之间的关系,而无需使用连接等复杂查询。

  • 内置 Web 应用程序- Neo4j 提供内置Neo4j 浏览器Web 应用程序。使用它,您可以创建和查询图形数据。

  • 驱动程序- Neo4j 可以使用 -

    • REST API 可与 Java、Spring、Scala 等编程语言配合使用。

    • 用于与 Node JS 等 UI MVC 框架配合使用的 Java 脚本。

    • 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序。除此之外,您还可以使用其他数据库,例如 MongoDB、Cassandra 等。

  • 索引- Neo4j 通过使用 Apache Lucence 支持索引。

Neo4j - 数据模型

Neo4j 属性图数据模型

Neo4j 图形数据库遵循属性图模型来存储和管理其数据。

以下是属性图模型的主要特征 -

  • 该模型表示节点、关系和属性中的数据

  • 属性是键值对

  • 节点使用圆圈表示,关系使用箭头键表示

  • 关系有方向:单向和双向

  • 每个关系包含“起始节点”或“从节点”和“到节点”或“结束节点”

  • 节点和关系都包含属性

  • 关系连接节点

在属性图数据模型中,关系应该是有方向的。如果我们尝试在没有方向的情况下创建关系,那么它会抛出错误消息。

在 Neo4j 中也是如此,关系应该是有方向的。如果我们尝试创建没有方向的关系,那么 Neo4j 将抛出一条错误消息,指出“关系应该是有方向的”。

Neo4j 图形数据库将其所有数据存储在节点和关系中。我们既不需要任何额外的 RRBMS 数据库,也不需要任何 SQL 数据库来存储 Neo4j 数据库数据。它以其本机格式以图表形式存储数据。

Neo4j 使用本机 GPE(图形处理引擎)来处理其本机图形存储格式。

图数据库数据模型的主要构建块是 -

  • 节点
  • 人际关系
  • 特性

以下是属性图的简单示例。

属性图

在这里,我们使用圆圈表示节点。关系用箭头表示。关系是有方向的。我们可以用属性(键值对)来表示节点的数据。在此示例中,我们表示了节点圆内每个节点的 Id 属性。

Neo4j - 环境设置

在本章中,我们将讨论如何使用 exe 文件在系统中安装 Neo4j。

使用 Windows exe 文件设置 Neo4j 数据库服务器

按照下面给出的步骤将 Neo4j 下载到您的系统中。

步骤 1 - 使用https://neo4j.com/访问 Neo4j 官方网站。点击该链接后,您将进入 neo4j 网站的主页。

主页

步骤 2 - 如上面的屏幕截图中突出显示的,此页面的右上角有一个“下载”按钮。点击它。

步骤 3 - 这会将您重定向到下载页面,您可以在其中下载 Neo4j 的社区版和企业版。单击相应的按钮下载该软件的社区版。

下载页面

步骤 4 - 这将带您进入可以下载与不同操作系统兼容的 Neo4j 软件社区版本的页面。下载与所需操作系统相对应的文件。

各自的操作系统

这会将名为neo4j-community_windows-x64_3_1_1.exe的文件下载到您的系统,如以下屏幕截图所示。

社区之窗

步骤 5 - 双击 exe 文件安装 Neo4j Server。

可执行文件

步骤 6 - 接受许可协议并继续安装。完成该过程后,您可以观察到 Neo4j 已安装在您的系统中。

启动服务器

步骤 1 - 单击 Windows 开始菜单并通过单击 Neo4j 的开始菜单快捷方式启动 Neo4j 服务器。

启动服务器

步骤 2 - 单击快捷方式,您将看到 Neo4j 社区版的窗口。默认情况下,它选择 c:\Users\[用户名]\Documents\Neo4j\default.graphdb。如果需要,您可以将路径更改为其他目录。

捷径

步骤 3 - 单击“开始”按钮启动 Neo4j 服务器。

开始按钮

服务器启动后,您可以观察到数据库目录已填充,如以下屏幕截图所示。

数据库目录

使用 Neo4j

正如前面章节中所讨论的,neo4j 提供了一个内置的浏览应用程序来与 Neo4j 一起使用。您可以使用 URL http://localhost:7474/访问 Neo4j

在职的

Neo4j - 构建块

Neo4j 图形数据库具有以下构建块 -

  • 节点
  • 特性
  • 人际关系
  • 标签
  • 数据浏览器

节点

节点是图的基本单位。它包含具有键值对的属性,如下图所示。

节点

此处,节点名称 =“Employee”,它包含一组作为键值对的属性。

特性

属性是描述图节点和关系的键值对。

Key = Value 

其中 Key 是字符串,Value 可以使用任何 Neo4j 数据类型表示。

人际关系

关系是图数据库的另一个主要构建块。它连接两个节点,如下图所示。

关系

这里,Emp和Dept是两个不同的节点。“WORKS_FOR”是 Emp 和 Dept 节点之间的关系。

正如它所表示的,从 Emp 到 Dept 的箭头标记,这种关系描述了 -

Emp WORKS_FOR Dept 

每个关系包含一个起始节点和一个结束节点。

这里,“Emp”是起始节点,“Dept”是结束节点。

由于该关系箭头标记表示从“Emp”节点到“Dept”节点的关系,因此该关系被称为到“Dept”节点的“传入关系”和到“Emp”节点的“传出关系”。

与节点一样,关系也可以包含作为键值对的属性。

特性

这里,“WORKS_FOR”关系有一个属性作为键值对。

Id = 123 

它代表此关系的 Id。

标签

标签将通用名称与一组节点或关系相关联。节点或关系可以包含一个或多个标签。我们可以为现有节点或关系创建新标签。我们可以从现有节点或关系中删除现有标签。

从上图中,我们可以观察到有两个节点。

左侧节点有一个标签:“Emp”,右侧节点有一个标签:“Dept”。

这两个节点之间的关系也有一个标签:“WORKS_FOR”。

注意- Neo4j 将数据存储在节点或关系的属性中。

Neo4j 数据浏览器

安装 Neo4j 后,我们可以使用以下 URL 访问 Neo4j 数据浏览器

http://localhost:7474/browser/

数据浏览器

Neo4j 数据浏览器用于执行 CQL 命令并查看输出。

在这里,我们需要在美元提示符下执行所有 CQL 命令:“$”

在美元符号后键入命令,然后单击“执行”按钮来运行命令。

它与 Neo4j 数据库服务器交互,检索并在美元提示符下方显示结果。

使用“VI View”按钮以图表格式查看结果。上图显示了“UI View”格式的结果。

使用“网格视图”按钮可以在网格视图中查看结果。下图以“网格视图”格式显示了相同的结果。

网格视图

当我们使用“网格视图”查看查询结果时,我们可以将它们导出到两种不同格式的文件中。

CSV

单击“导出 CSV”按钮以 csv 文件格式导出结果。

CSV

JSON

单击“导出 JSON”按钮以 JSON 文件格式导出结果。

杰森

但是,如果我们使用“UI View”查看查询结果,我们可以将它们导出到只有一种格式的文件中:JSON

Neo4j CQL - 简介

CQL 代表 Cypher 查询语言。就像 Oracle 数据库有查询语言 SQL 一样,Neo4j 有 CQL 作为查询语言。

Neo4j CQL

  • 是 Neo4j 图形数据库的查询语言。
  • 是一种声明性模式匹配语言。
  • 遵循类似 SQL 的语法。
  • 语法非常简单并且采用人类可读的格式。

像Oracle SQL

  • Neo4j CQL 具有执行数据库操作的命令。

  • Neo4j CQL 支持许多子句,例如 WHERE、ORDER BY 等,可以轻松编写非常复杂的查询。

  • Neo4j CQL 支持一些函数,例如 String、Aggregation。除了它们之外,它还支持一些关系函数。

Neo4j CQL 子句

以下是Neo4j C ypher Query Language的读取子句-

先生编号 阅读条款 用法
1 匹配 该子句用于搜索具有指定模式的数据。
2 可选搭配 这与匹配相同,唯一的区别是它可以在模式丢失部分的情况下使用空值。
3 在哪里 该子句 id 用于向 CQL 查询添加内容。
4 开始 该子句用于通过旧索引查找起点。
5 加载 CSV 该子句用于从 CSV 文件导入数据。

以下是Neo4j C ypher Query Language的 write 子句-

先生编号 写条款 用法
1 创造 该子句用于创建节点、关系和属性。
2 合并 该子句验证指定的模式是否存在于图中。如果没有,它就会创建模式。
3 该子句用于更新节点上的标签、节点上的属性和关系。
4 删除 该子句用于从图中删除节点、关系或路径等。
5 消除 该子句用于从节点和关系中删除属性和元素。
6 福瑞奇 此类用于更新列表中的数据。
7 创造独特 使用 CREATE 和 MATCH 子句,您可以通过匹配现有模式并创建缺失的模式来获得唯一的模式。
8 使用 Cypher 导入 CSV 文件 使用加载 CSV,您可以从 .csv 文件导入数据。

以下是Neo4j C ypher Query Language的一般条款-

先生编号 一般条款 用法
1 返回 该子句用于定义查询结果集中包含哪些内容。
2 订购依据 该子句用于按顺序排列查询的输出。它与子句RETURNWITH一起使用。
3 限制 该子句用于将结果中的行限制为特定值。
4 跳过 该子句用于定义从哪一行开始,包括输出中的行。
5 该子句用于将查询部分链接在一起。
6 放松 该子句用于将列表扩展为行序列。
7 联盟 该子句用于组合多个查询的结果。
8 称呼 该子句用于调用数据库中部署的过程。

Neo4j CQL 函数

以下是常用的 Neo4j CQL 函数 -

先生编号 CQL 函数 用法
1 细绳 它们用于处理字符串文字。
2 聚合 它们用于对 CQL 查询结果执行一些聚合操作。
3 关系 它们用于获取关系的详细信息,例如起始节点、结束节点等。

我们将在后续章节中详细讨论所有 Neo4j CQL 命令、子句和函数的语法、用法和示例。

Neo4j CQL 数据类型

这些数据类型与Java语言类似。它们用于定义节点或关系的属性。

Neo4j CQL 支持以下数据类型 -

先生编号 CQL 数据类型 用法
1 布尔值 它用于表示布尔文字:true、false。
2 字节 它用于表示 8 位整数。
3 短的 它用于表示 16 位整数。
4 整数 它用于表示 32 位整数。
5 长的 它用于表示 64 位整数。
6 漂浮 它用于表示 32 位浮点数。
7 双倍的 它用于表示 64 位浮点数。
8 字符 它用于表示 16 位字符。
9 细绳 它用于表示字符串。

CQL 运算符

以下是 Neo4j Cypher 查询语言支持的运算符列表。

先生编号 类型 运营商
1 数学 +、-、*、/、%、^
2 比较 +、<>、<、>、<=、>=
3 布尔值 与、或、异或、非
4 细绳 +
5 列表 +、IN、[X]、[X…..Y]
6 正则表达式 =-
7 字符串匹配 开始于、结束于、约束

Neo4j CQL 中的布尔运算符

Neo4j 支持在 Neo4j CQL WHERE 子句中使用以下布尔运算符以支持多个条件。

先生编号 布尔运算符 描述
1 它是一个 Neo4j CQL 关键字,支持 AND 操作。它就像 SQL AND 运算符。
2 或者 它是一个 Neo4j CQL 关键字,支持 OR 运算。它就像 SQL AND 运算符。
3 不是 它是一个 Neo4j CQL 关键字,支持 NOT 操作。它就像 SQL AND 运算符。
4 异或 它是一个 Neo4j CQL 关键字,支持 XOR 操作。它就像 SQL AND 运算符。

Neo4j CQL 中的比较运算符

Neo4j 支持在 Neo4j CQL WHERE 子句中使用以下比较运算符来支持条件。

先生编号 布尔运算符 描述
1 = 它是 Neo4j CQL“等于”运算符。
2 < > 它是 Neo4j CQL“不等于”运算符。
3 < 它是 Neo4j CQL“小于”运算符。
4 > 它是 Neo4j CQL“大于”运算符。
5 <= 它是 Neo4j CQL“小于或等于”运算符。
6 >= 它是 Neo4j CQL“大于或等于”运算符。

Neo4j CQL - 创建节点

正如所讨论的,节点是图形数据库中的数据/记录。您可以使用CREATE子句在 Neo4j 中创建节点。本章教您如何 -

  • 创建单个节点
  • 创建多个节点
  • 创建一个带有标签的节点
  • 创建具有多个标签的节点
  • 创建具有属性的节点
  • 返回创建的节点

创建单个节点

您可以通过简单地指定要与 CREATE 子句一起创建的节点的名称来在 Neo4j 中创建节点。

句法

以下是使用 Cypher 查询语言创建节点的语法。

CREATE (node_name); 

注意- 分号 (;) 是可选的。

例子

以下是在 Neo4j 中创建节点的示例 Cypher 查询。

CREATE (sample) 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器,如以下屏幕截图所示。

开始按钮

步骤 2 - 打开浏览器,将以下 URL 复制粘贴到地址栏中http://localhost:7474/。这将为您提供 Neo4j 的内置浏览器应用程序,并带有美元提示,如以下屏幕截图所示。

浏览器应用程序

步骤 3 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

美元提示

结果

执行后,您将得到以下结果。

单节点

确认

要验证节点类型的创建,请在美元提示符中执行以下查询。

MATCH (n) RETURN n 

该查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论该查询)。

执行时,此查询显示创建的节点,如以下屏幕截图所示。

数据库中的节点

创建多个节点

Neo4j CQL 的 create 子句也用于同时创建多个节点。为此,您需要传递要创建的节点的名称,并用逗号分隔。

句法

以下是使用 CREATE 子句创建多个节点的语法。

CREATE (node1),(node2)

例子

以下是一个在 Neo4j 中创建多个节点的 Cypher 查询示例。

CREATE (sample1),(sample2) 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

所需查询

结果

执行后,您将得到以下结果。

多节点

确认

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n 

该查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论该查询)。

执行时,此查询显示创建的节点,如以下屏幕截图所示。

多重验证

创建带有标签的节点

Neo4j 中的标签用于使用标签对节点进行分组(分类)。您可以使用 CREATE 子句为 Neo4j 中的节点创建标签。

句法

以下是使用 Cypher 查询语言创建带有标签的节点的语法。

CREATE (node:label) 

例子

以下是一个示例 Cypher 查询,它创建一个带有标签的节点。

CREATE (Dhawan:player) 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

节点标签

结果

执行后,您将得到以下结果。

节点声明

确认

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n 

该查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论该查询)。

执行时,此查询显示创建的节点,如以下屏幕截图所示。

标签验证

创建具有多个标签的节点

您还可以为单个节点创建多个标签。您需要通过用冒号“:”分隔来指定节点的标签。

句法

以下是创建具有多个标签的节点的语法。

CREATE (node:label1:label2:. . . . labeln) 

例子

以下是一个示例 Cypher 查询,它在 Neo4j 中创建具有多个标签的节点。

CREATE (Dhawan:person:player) 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

多重标签

结果

执行后,您将得到以下结果。

执行的查询

确认

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n 

该查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论该查询)。

执行时,此查询显示创建的节点,如以下屏幕截图所示。

多标签验证

使用属性创建节点

属性是节点用来存储数据的键值对。您可以使用 CREATE 子句创建具有属性的节点。您需要在花括号“{ }”内指定这些属性,并用逗号分隔。

句法

以下是创建具有属性的节点的语法。

CREATE (node:label { key1: value, key2: value, . . . . . . . . .  }) 

例子

以下是一个示例 Cypher 查询,它创建一个具有属性的节点。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

属性步骤

结果

执行后,您将得到以下结果。

标签结果

确认

要验证节点的创建,请在美元提示符中键入并执行以下查询。

MATCH (n) RETURN n 

该查询返回数据库中的所有节点(我们将在接下来的章节中详细讨论该查询)。

执行时,此查询显示创建的节点,如以下屏幕截图所示。

创建节点

返回创建的节点

在整章中,我们使用MATCH (n) RETURN n查询来查看创建的节点。此查询返回数据库中的所有现有节点。

相反,我们可以使用 RETURN 子句和 CREATE 来查看新创建的节点。

句法

以下是 Neo4j 中返回节点的语法。

CREATE (Node:Label{properties. . . . }) RETURN Node 

例子

以下是一个示例 Cypher 查询,它创建一个具有属性的节点并返回它。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) RETURN Dhawan 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

播放按钮

结果

执行后,您将得到以下结果。

返回节点

Neo4j CQL - 创建关系

在 Noe4j 中,关系是一个元素,我们使用它连接图的两个节点。这些关系具有数据的方向、类型和形式模式。本章教您如何 -

  • 建立关系
  • 创建现有节点之间的关系
  • 创建与标签和属性的关系

建立关系

我们可以使用 CREATE 子句创建关系。我们将根据连字符“-”和箭头“→”之间关系的方向来指定方括号“[]”内的关系,如以下语法所示。

句法

以下是使用 CREATE 子句创建关系的语法。

CREATE (node1)-[:RelationshipType]->(node2) 

例子

首先,在数据库中创建两个节点Ind和Dhawan,如下图。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
CREATE (Ind:Country {name: "India"})

现在,在这两个节点之间创建一个名为BATSMAN_OF的关系:

CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind) 

最后,返回两个节点以查看创建的关系。

RETURN Dhawan, Ind 

浏览器应用程序

将所需的查询复制并粘贴到美元提示中,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

突出显示的查询

结果

执行后,您将得到以下结果。

执行中

在现有节点之间创建关系

您还可以使用MATCH子句在现有节点之间创建关系。

句法

以下是使用 MATCH 子句创建关系的语法。

MATCH (a:LabeofNode1), (b:LabeofNode2) 
   WHERE a.name = "nameofnode1" AND b.name = " nameofnode2" 
CREATE (a)-[: Relation]->(b) 
RETURN a,b 

例子

以下是一个使用 match 子句创建关系的 Cypher 查询示例。

MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India" 
CREATE (a)-[r: BATSMAN_OF]->(b) 
RETURN a,b 

要执行上述查询,请执行以下步骤。

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

现有节点

结果

执行后,您将得到以下结果。

执行中

创建标签和属性的关系

您可以使用 CREATE 子句创建标签和属性的关系。

句法

以下是使用 CREATE 子句创建标签和属性关系的语法。

CREATE (node1)-[label:Rel_Type {key1:value1, key2:value2, . . . n}]-> (node2) 

例子

以下是一个示例 Cypher 查询,它创建与标签和属性的关系。

MATCH (a:player), (b:Country) WHERE a.name = "Shikar Dhawan" AND b.name = "India" 
CREATE (a)-[r:BATSMAN_OF {Matches:5, Avg:90.75}]->(b)  
RETURN a,b 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

标签属性

结果

执行后,您将得到以下结果。

执行中

创建完整路径

在 Neo4j 中,路径是使用连续关系形成的。可以使用 create 子句创建路径。

句法

以下是使用 CREATE 子句在 Neo4j 中创建路径的语法。

CREATE p = (Node1 {properties})-[:Relationship_Type]->
   (Node2 {properties})[:Relationship_Type]->(Node3 {properties}) 
RETURN p 

例子

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

冠军奖杯

结果

执行后,您将得到以下结果。

结果

Neo4j - 合并命令

MERGE命令是CREATE命令和MATCH命令的组合。

Neo4j CQL MERGE 命令在图表中搜索给定模式。如果存在,则返回结果。

如果它不存在于图中,那么它会创建一个新的节点/关系并返回结果。

在本章中,您将学习如何 -

  • 合并带有标签的节点
  • 合并具有属性的节点
  • OnCreate 和 OnMatch
  • 合并关系

句法

以下是 MERGE 命令的语法。

MERGE (node: label {properties . . . . . . . }) 

在继续本节中的示例之前,请在数据库中创建两个带有标签 Dhawan 和 Ind 的节点。创建从 Dhawan 到 Ind 的类型为“BATSMAN_OF”的关系,如下所示。

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
CREATE (Ind:Country {name: "India"}) 
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind) 

将节点与标签合并

您可以使用 MERGE 子句根据标签合并数据库中的节点。如果您尝试根据标签合并节点,那么 Neo4j 会验证是否存在具有给定标签的节点。如果没有,将创建当前节点。

句法

以下是基于标签合并节点的语法。

MERGE (node:label) RETURN node 

实施例1

以下是一个示例 Cypher 查询,它将节点合并到 Neo4j 中(基于标签)。当您执行此查询时,Neo4j 会验证是否存在带有标签player 的节点。如果没有,它会创建一个名为“Jadeja”的节点并返回它。

如果存在具有给定标签的任何节点,Neo4j 将返回所有节点。

MERGE (Jadeja:player) RETURN Jadeja 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

合并

结果

执行后,您将得到以下结果。由于您已经在数据库中创建了一个名为“Dhawan”且标签为“player”的节点,Neo4j 返回它,如下图所示。

达万玩家

实施例2

现在,尝试将名为“CT2013”​​的节点与名为 Tournament 的标签合并。由于没有带有此标签的节点,Neo4j 创建一个具有给定名称的节点并返回它。

MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) 
RETURN CT2013, labels(CT2013)

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

合并节点

结果

执行后,您将得到以下结果。正如所讨论的,因为没有具有给定标签(锦标赛)的节点。Neo4j 创建并返回指定的节点,如以下屏幕截图所示。

角逐

将节点与属性合并

您还可以将节点与一组属性合并。如果这样做,Neo4j 会搜索指定节点的相等匹配项,包括属性。如果没有找到,就会创建一个。

句法

以下是使用属性合并节点的语法。

MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . }) 

例子

以下是使用属性合并节点的 Cypher 查询示例。此查询尝试使用属性和标签合并名为“jadeja”的节点。由于不存在具有确切标签和属性的此类节点,Neo4j 创建了一个。

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
RETURN Jadeja 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

合并属性

结果

执行后,您将得到以下结果。正如所讨论的,由于没有具有指定标签和属性的节点,因此它会创建一个,如以下屏幕截图所示。

性能结果

OnCreate 和 OnMatch

每当我们执行合并查询时,就会匹配或创建一个节点。使用 on create 和 on match,您可以设置用于指示节点是否已创建或匹配的属性。

句法

以下是OnCreateOnMatch子句的语法。

MERGE (node:label {properties . . . . . . . . . . .}) 
ON CREATE SET property.isCreated ="true" 
ON MATCH SET property.isFound ="true"

例子

以下是一个 Cypher 查询示例,演示了 Neo4j 中OnCreateOnMatch子句的用法。如果数据库中已经存在指定的节点,则匹配该节点,并在该节点中创建键值对 isFound = "true" 的属性。

如果数据库中不存在指定的节点,则将创建该节点,并在其中创建一个键值对 isCreated =“true”的属性。

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
ON CREATE SET Jadeja.isCreated = "true" 
ON MATCH SET Jadeja.isFound = "true" 
RETURN Jadeja 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

比赛套装

结果

执行后,您将得到以下结果。正如所讨论的,由于没有具有指定详细信息的节点,Neo4j 创建了它以及属性isFound,如以下屏幕截图所示。

创建结果时

合并关系

就像节点一样,您也可以使用 MERGE 子句合并关系。

例子

以下是一个示例 Cypher 查询,它使用 Neo4j 中的 MATCH 子句合并关系。此查询尝试合并节点“ind”(标签:国家和名称:印度)和 ICC13(标签:锦标赛和名称:ICC Champions Trophy 2013)之间名为WINNERS_OF的关系。

由于这种关系不存在,Neo4j 创建一个。

MATCH (a:Country), (b:Tournament) 
   WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013" 
   MERGE (a)-[r:WINNERS_OF]->(b) 
RETURN a, b 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

获奖者名单

结果

执行后,您将得到以下结果。由于数据库中不存在指定的关系,Neo4j 创建一个关系,如下图所示。

关系合并

同样,您也可以合并多个关系和无向关系。

Neo4j - 集合子句

使用 Set 子句,您可以向现有节点或关系添加新属性,还可以添加或更新现有属性值。

在本章中,我们将讨论如何 -

  • 设置属性
  • 删除属性
  • 设置多个属性
  • 在节点上设置标签
  • 在一个节点上设置多个标签

设置属性

使用 SET 子句,您可以在节点中创建新属性。

句法

以下是设置属性的语法。

MATCH (node:label{properties . . . . . . . . . . . . . . }) 
SET node.property = value 
RETURN node

例子

在继续该示例之前,首先创建一个名为 Dhawan 的节点,如下所示。

CREATE (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"}) 

以下是一个示例 Cypher 查询,用于创建名为“highestscore”且值为“187”的属性。

MATCH (Dhawan:player{name: "shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
SET Dhawan.highestscore = 187 
RETURN Dhawan

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如以下屏幕截图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

比赛选手

结果

执行后,您将得到以下结果。在这里您可以观察到在名为“Dhawan”的节点中创建了一个具有键值对highestscore/187 的属性。

核心价值

删除属性

您可以通过将NULL作为值传递给现有属性来删除该属性。

句法

以下是使用 SET 子句从节点中删除属性的语法。

MATCH (node:label {properties}) 
SET node.property = NULL 
RETURN node 

例子

在继续该示例之前,首先创建一个节点“jadeja”,如下所示。

Create (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"})

以下是一个示例 Cypher 查询,它使用 SET 子句从此节点中删除名为 POB 的属性,如下所示。

MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
SET Jadeja.POB = NULL 
RETURN Jadeja 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

删除属性

结果

执行后,您将得到以下结果。在这里您可以观察到名为POB的变量已被删除。

已删除 POB

设置多个属性

以同样的方式,您可以使用 Set 子句在一个节点中创建多个属性。为此,您需要用逗号指定这些键值对。

句法

以下是使用 SET 子句在节点中创建多个属性的语法。

MATCH (node:label {properties}) 
SET node.property1 = value, node.property2 = value 
RETURN node 

例子

以下是一个示例 Cypher 查询,它使用 Neo4j 中的 SET 子句在节点中创建多个属性。

MATCH (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988})  
SET Jadeja.POB: "NavagamGhed", Jadeja.HS = "90" 
RETURN Jadeja

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

多种属性

结果

执行后,您将得到以下结果。在这里您可以观察到名为 POB 和 HS 的属性已创建。

执行属性

在节点上设置标签

您可以使用 SET 子句为现有节点设置标签。

句法

以下是为现有节点设置标签的语法。

MATCH (n {properties . . . . . . . }) 
SET n :label 
RETURN n 

例子

在继续该示例之前,首先创建一个节点“Anderson”,如下所示。

CREATE (Anderson {name: "James Anderson", YOB: 1982, POB: "Burnely"})

以下是使用 SET 子句在节点上设置标签的示例 Cypher 查询。此查询将标签“player”添加到节点 Anderson 并返回它。

MATCH (Anderson {name: "James Anderson", YOB: 1982, POB: "Burnely"}) 
SET Anderson: player 
RETURN Anderson 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

标签节点

结果

执行后,您将得到以下结果。在这里您可以观察到名为“player”的标签已添加到节点中。

添加了玩家

在一个节点上设置多个标签

您可以使用 SET 子句为现有节点设置多个标签。这里您需要通过用冒号“:”分隔来指定标签。

句法

以下是使用 SET 子句为现有节点设置多个标签的语法。

MATCH (n {properties . . . . . . . }) 
SET n :label1:label2 
RETURN n 

例子

在继续该示例之前,首先创建一个名为“Ishant”的节点,如下所示。

CREATE (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 

以下是一个示例 Cypher 查询,用于使用 SET 子句在节点上创建多个标签。

MATCH (Ishant {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 
SET Ishant: player:person 
RETURN Ishant 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

多标签

结果

执行后,您将得到以下结果。在这里,您可以观察到两个标签(人员和玩家)被添加到名为Ishant的节点中。

伊桑特玩家

Neo4j - 删除条款

您可以使用 DELETE 子句从数据库中删除节点和关系。

删除所有节点和关系

以下是使用 DELETE 子句删除数据库中所有节点和关系的查询。

询问

MATCH (n) DETACH DELETE n

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

分离匹配

这将从 Neo4j 数据库中删除所有节点和关系并将其清空。

删除特定节点

要删除特定节点,您需要在上述查询中的“n”位置指定该节点的详细信息。

句法

以下是使用 DELETE 子句从 Neo4j 删除特定节点的语法。

MATCH (node:label {properties . . . . . . . . . .  }) 
DETACH DELETE node

例子

在继续该示例之前,请在 Neo4j 数据库中创建一个节点“Ishant”,如下所示。

CREATE (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 

以下是一个示例 Cypher 查询,它使用 DELETE 子句删除上面创建的节点。

MATCH (Ishant:player {name: "Ishant Sharma", YOB: 1988, POB: "Delhi"}) 
DETACH DELETE Ishant

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(以执行查询)。

特定节点

结果

执行后,您将得到以下结果。这里可以观察到指定的节点被删除了。

已删除的节点

Neo4j - 删除条款

REMOVE 子句用于从图形元素(节点或关系)中删除属性和标签。

Neo4j CQL DELETE 和 REMOVE 命令之间的主要区别是 -

  • DELETE操作用于删除节点及其关联关系。
  • REMOVE 操作用于删除标签和属性。

删除属性

您可以使用 MATCH 和 REMOVE 子句删除节点的属性。

句法

以下是使用 REMOVE 子句删除节点属性的语法。

MATCH (node:label{properties . . . . . . . }) 
REMOVE node.property 
RETURN node 

例子

在继续该示例之前,请创建一个名为Dhoni的节点,如下所示。

CREATE (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"})

以下是使用 REMOVE 子句删除上面创建的节点的 Cypher 查询示例。

MATCH (Dhoni:player {name: "MahendraSingh Dhoni", YOB: 1981, POB: "Ranchi"}) 
REMOVE Dhoni.POB 
RETURN Dhoni 

要执行上述查询,请执行以下步骤 -

步骤 1 - 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL http://localhost:7474/打开 Neo4j 的内置浏览器应用程序,如下图所示。

浏览器应用程序

步骤 2 - 在美元提示中复制并粘贴所需的查询,然后按突出显示的播放按钮(以执行查询)