- Neo4j CQL
- Neo4j CQL - 简介
- Neo4j CQL - 创建节点
- Neo4j CQL - 创建关系
- Neo4j CQL 编写子句
- Neo4j - 合并命令
- Neo4j - 集合子句
- Neo4j - 删除条款
- Neo4j - 删除条款
- Neo4j - Foreach 子句
- Neo4j CQL 读取子句
- Neo4j - 匹配子句
- Neo4j - 可选匹配子句
- Neo4j -Where 子句
- Neo4j - 计数函数
- Neo4j CQL 通用条款
- Neo4j - 退货条款
- Neo4j - 按条款排序
- Neo4j - 限制条款
- Neo4j - 跳过子句
- Neo4j - With 子句
- Neo4j - 放松条款
- Neo4j CQL 函数
- Neo4j - 字符串函数
- Neo4j - 聚合函数
- Neo4j CQL 管理员
- Neo4j - 备份和恢复
- Neo4j - 索引
- Neo4j - 创建唯一约束
- Neo4j - 丢弃独特的
- Neo4j 有用资源
- Neo4j - 快速指南
- Neo4j - 有用的资源
- Neo4j - 讨论
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 文件格式导出结果。
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 | 订购依据 | 该子句用于按顺序排列查询的输出。它与子句RETURN或WITH一起使用。 |
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,您可以设置用于指示节点是否已创建或匹配的属性。
句法
以下是OnCreate和OnMatch子句的语法。
MERGE (node:label {properties . . . . . . . . . . .}) ON CREATE SET property.isCreated ="true" ON MATCH SET property.isFound ="true"
例子
以下是一个 Cypher 查询示例,演示了 Neo4j 中OnCreate和OnMatch子句的用法。如果数据库中已经存在指定的节点,则匹配该节点,并在该节点中创建键值对 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的变量已被删除。
设置多个属性
以同样的方式,您可以使用 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 - 在美元提示中复制并粘贴所需的查询,然后按突出显示的播放按钮(以执行查询)