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

    以下是将节点合并到 Neo4j(基于标签)的示例 Cypher 查询。当你执行这个查询时,Neo4j 会验证是否有任何带有标签的节点player. 如果没有,它会创建一个名为“Jadeja”的节点并返回它。
    如果存在具有给定标签的任何节点,Neo4j 会将它们全部返回。
    
    MERGE (Jadeja:player) RETURN Jadeja 
    
    要执行上述查询,请执行以下步骤 -
    步骤 1− 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL 打开 Neo4j 的内置浏览器应用程序http://localhost:7474/如以下屏幕截图所示。
    浏览器应用
    步骤 2- 在美元提示符中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(执行查询)。
    合并

    结果

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

    示例 2

    现在,尝试将名为“CT2013”​​的节点与名为 Tournament 的标签合并。由于没有具有此标签的节点,Neo4j 使用给定名称创建一个节点并将其返回。
    
    MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) 
    RETURN CT2013, labels(CT2013)
    
    要执行上述查询,请执行以下步骤 -
    步骤 1− 打开 Neo4j 桌面应用程序并启动 Neo4j 服务器。使用 URL 打开 Neo4j 的内置浏览器应用程序http://localhost:7474/如以下屏幕截图所示。
    浏览器应用
    步骤 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 打开 Neo4j 的内置浏览器应用程序http://localhost:7474/如以下屏幕截图所示。
    浏览器应用
    步骤 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 查询,它演示了OnCreateOnMatchNeo4j 中的子句。如果指定的节点已经存在于数据库中,则匹配该节点,并在该节点中创建键值对 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 打开 Neo4j 的内置浏览器应用程序http://localhost:7474/如以下屏幕截图所示。
    浏览器应用
    步骤 2- 在美元提示符中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(执行查询)。
    匹配集

    结果

    执行时,您将得到以下结果。如前所述,由于没有具有指定详细信息的节点,Neo4j 将其与属性一起创建isFound如以下屏幕截图所示。
    Oncreate 结果
  • 合并关系

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

    例子

    以下是一个示例 Cypher 查询,它使用 Neo4j 中的 MATCH 子句合并关系。此查询尝试合并名为WINNERS_OF在节点“ind”(标签:国家和名称:印度)和 ICC13(标签:锦标赛和名称:ICC Champions Trophy 2013)之间。
    由于这种关系不存在,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 打开 Neo4j 的内置浏览器应用程序http://localhost:7474/如以下屏幕截图所示。
    浏览器应用
    步骤 2- 在美元提示符中复制并粘贴所需的查询,然后按以下屏幕截图中突出显示的播放按钮(执行查询)。
    获奖名单

    结果

    执行时,您将得到以下结果。由于数据库中不存在指定的关系,Neo4j 会创建一个,如下面的屏幕截图所示。
    关系合并
    同样,您也可以合并多个关系和无向关系。