12-Neo4j-MERGE-NULL-IN
无    2024-04-17 09:59:47    29    0    0
bigdata

MERGE语法

  • 创建节点,关系和属性

  • 为从数据库检索数据

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

  1. MERGE = CREATE + MATCH

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

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

Neo4j CQL MERGE 语法

  1. MERGE (<node-name>:<label-name>
  2. {
  3. <Property1-name>:<Pro<rty1-Value>
  4. .....
  5. <Propertyn-name>:<Propertyn-Value>
  6. })

语法说明:

S.No.语法元素描述
1MERGE它是一个 Neo4j CQL 关键字。
2它是节点或关系的名称。
3它是节点或关系的标签名称。
4它是节点或关系的属性名称。
5它是节点或关系的属性值。
6使用 colon(:) 运算符来分隔节点或关系的属性名称和值。

注意 -

Neo4j CQL MERGE 命令语法与 CQL CREATE 命令类似。

我们将使用这两个命令执行以下操作 - 

  • 创建具有一个属性的配置文件节点:Id,名称

  • 创建具有相同属性的同一个 Profile 节点:Id,Name

  • 检索所有 Profile 节点详细信息并观察结果

我们将使用 CREATE 命令执行这些操作

示例

此示例通过使用 CREATE,MATCH 和 RETURN 命令创建 Google + 个人资料,执行上述所有操作。

操作(1):创建具有属性:Id,Name 的 Profile 节点

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器上键入以下命令

  1. CREATE (gp1:GoogleProfile1 {Id: 201401, Name:"Apple"})

步骤 3 - 点击 “执行” 按钮并观察结果。

如果我们观察到成功消息,它已经向 GoogleProfile1 节点添加了两个属性。

操作(2):创建具有相同属性的同一个 Profile 节点:Id,Name。

步骤 1 - 打开 Neo4j 的数据浏览器

步骤 2 - 输入在数据浏览器下面的命令

  1. CREATE (gp1:GoogleProfile1 {Id: 201401, Name:"Apple"})

步骤 3 - 点击 “执行” 按钮并观察结果。

如果我们观察到成功消息,它已经向 GoogleProfile1 节点添加了两个属性。

操作(3):检索所有 Profile 节点详细信息并观察结果。

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器上键入以下命令

  1. MATCH (gp1:GoogleProfile1)
  2. RETURN gp1.Id,gp1.Name

步骤 3 - 点击 “执行” 按钮并观察结果。

如果我们观察到上面的查询结果,它显示 2 行重复的值。

CQL CREATE 命令检查此节点是否可用,它只是在数据库中创建新节点。

通过观察这些结果,我们可以说 CREATE 命令总是向数据库添加新的节点。

示例

此示例通过使用 MERGE 和 RETURN 命令创建 Google + 个人资料,执行相同的上述操作。

操作(1):创建具有属性:Id,Name 的 Profile 节点

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器上键入以下命令

  1. MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

步骤 3 - 点击 “执行” 按钮并观察结果。

如果我们观察到成功消息,它已经向 GoogleProfile1 节点添加了两个属性。

操作(2):创建具有相同属性的同一个 Profile 节点:Id,Name。

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器上键入以下命令

  1. MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

步骤 3 - 点击 “执行” 按钮并观察结果。

如果我们观察到成功消息,它已经向 GoogleProfile1 节点添加了两个属性。

操作(3):检索所有 Profile 节点详细信息并观察结果

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器上键入以下命令

  1. MATCH (gp2:GoogleProfile2)
  2. RETURN gp2.Id,gp2.Name

步骤 3 - 点击 “执行” 按钮并观察结果。

如果我们观察上面的查询结果,它只显示一行,因为 CQL MERGE 命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的。

通过观察这些结果,我们可以说,CQL MERGE 命令将新的节点添加到数据库,只有当它不存在。

NULL值

Neo4j CQL 将空值视为对节点或关系的属性的缺失值或未定义值。

当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有 NULL 属性值的新节点。

让我们用一个例子来看这个。

例如:

此示例演示 CREATE 命令如何将 NULL 值设置为未定义属性。 如何检索没有 NULL 行的节点的所有行。

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器中的美元提示符下键入以下命令。

  1. MATCH (e:Employee)
  2. RETURN e.id,e.name,e.sal,e.deptno

步骤 3 - 点击执行按钮,观察结果。

这里观察所有 Employee 节点不包含 NULL 属性值。

步骤 4 - 键入以下命令,然后单击执行按钮

  1. CREATE (e:Employee)

如果我们观察到上面的成功消息,它没有创建任何属性到 Employee 节点。

步骤 5 - 键入以下命令,然后单击执行按钮

  1. MATCH (e:Employee)
  2. RETURN e.id,e.name,e.sal,e.deptno

如果我们观察这些结果,则以前的 CREATE 命令通过将其所有属性值设置为 NULL 来插入 Employee 节点。

步骤 6 - 键入以下命令并单击执行按钮

  1. MATCH (e:Employee)
  2. WHERE e.id IS NOT NULL
  3. RETURN e.id,e.name,e.sal,e.deptno

如果我们观察这些结果,它不返回 NULL 值行,因为我们提供了一个 WHERE 子句来过滤该行,即 Id 属性不应该包含 NULL 值。

  1. WHERE IS NOT NULL

这里我们使用 IS NOT 运算符来过滤 NULL 行。

步骤 7 - 键入以下命令,然后单击执行按钮

  1. MATCH (e:Employee)
  2. WHERE e.id IS NULL
  3. RETURN e.id,e.name,e.sal,e.deptno

如果我们观察这些结果,它只返回 NULL 值行,因为我们提供了一个 WHERE 子句来检查 ID 值为 NULL。

  1. WHERE IS NULL

这里我们使用 IS 操作符来仅返回 NULL 行。

IN语法

与 SQL 一样,Neo4j CQL 提供了一个 IN 运算符,以便为 CQL 命令提供值的集合。

  1. IN[<Collection-of-values>]

语法说明:

S.No.语法元素描述
1。IN它是一个 Neo4j CQL 关键字。
2。[它告诉 Neo4j CQL,一个值的集合的开始。
3。]它告诉 Neo4j CQL,值集合的结束。
4。它是由逗号运算符分隔的值的集合。

让我们用一个例子来研究一下。

例如:

此示例演示如何使用 IN 运算符检索 Employee 节点详细信息。

步骤 1 - 打开 Neo4j 数据浏览器

步骤 2 - 在数据浏览器中的 dollar 提示符下键入以下命令。

  1. MATCH (e:Employee)
  2. RETURN e.id,e.name,e.sal,e.deptno

步骤 3 - 点击执行按钮,观察结果。

我们可以观察到这个查询返回 4 行。

步骤 4 - 键入以下命令,然后单击执行按钮。

  1. MATCH (e:Employee)
  2. WHERE e.id IN [123,124]
  3. RETURN e.id,e.name,e.sal,e.deptno

此查询仅返回在 IN 运算符中指定的 id 匹配的两行。

上一篇: 12-MongoDB案例-JavaApi实践

下一篇: 12-Zookeeper分布式锁

文档导航