📜  Neo4j-合并命令

📅  最后修改于: 2020-11-27 06:53:14             🧑  作者: Mango


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 Query,它将一个节点合并到Neo4j中(基于标签)。当您执行此查询时,Neo4j验证是否存在带有标签播放器的节点。如果没有,它将创建一个名为“ Jadeja”的节点并返回它。

如果存在带有给定标签的任何节点,则Neo4j将它们全部返回。

MERGE (Jadeja:player) RETURN Jadeja 

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

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

浏览器应用

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

合并

结果

执行时,您将得到以下结果。由于您已经在数据库中创建了一个带有标签“ player”的名为“ Dhawan”的节点,因此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

每当执行合并查询时,就会匹配或创建一个节点。使用在创建时和在匹配时,可以设置属性以指示节点是创建还是匹配。

句法

以下是OnCreateOnMatch子句的语法。

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

以下是一个示例Cypher Query,它演示了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子句合并关系。

以下是一个示例密码查询,该查询使用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创建一个关系,如以下屏幕快照所示。

关系合并

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