Neo4j 学习笔记:创建、更新、删除节点/关系/属性

一、创建新节点

1.1 创建无属性的节点

       ➡ keyword: CREATE,句法如下:

(1)创建一个标签的节点:

CREATE(:)
  • node_name:是指代指节点的名称;
  • label_name:给新节点设置标签,用以区分各种节点的类,如:person, language等;
  • 生成一个有类别标签(如未创建则新添加一个标签)、有指代名的新节点。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第1张图片

   ★ 注意:如该节点已存在,也同样生成新的节点,只是id不同。

(2)创建多个标签的节点,多个标签之间用冒号隔开

CREATE(:::...)

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第2张图片

         这里,m既是Movie又是Cinema, Film, Picture。

 1.2 创建具有属性的新节点

        ➡ keyword: CREATE,句法如下:

CREATE(: {
        :,...,
        :
      )    
  • property1_name:属性1的名称;
  • property1_value:属性1的值;
  • 即,在花括号“{”内列举不同属性的键值对{:},键值对—键值对间用逗号“,”分隔。
  • 生成具有属性1...属性n的新节点。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第3张图片

    ★ 注意:属性的值,属性的值如是字符串string需添加双引号或单引号,如是数据不需添加。

二、更新节点、关系、属性

2.1 在两个现有节点之间创建无/有属性的关系(relationship)

        ➡ keyword: MATCH & CREATE,先使用MATCH命令检索现有的两个节点,再用CREATE命令创建它们之间的新关系。

MATCH (:,:)
CREATE (node1_name)-
       [:{}]- 
       (node2_name)
  • node1_name:节点1的名称;
  • node1_label_name:节点1的标签名;
  • relationship_name:关系的名称;
  • relationship_label_name:关系的标签名。

(1)无属性举例:

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第4张图片

    ★ 注意:若没有MATCH的过程,则默认生成的2个节点和关系。

(2)有属性举例,创建具有两个属性的关系

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第5张图片

    ★注意:

  • 属性以键值对形式创建,即: property: value;
  • 属性之间用逗号分隔,即:{property1: value1, property2: value2,...} 

★★★注意:

  • 使用CREATE创建关系时,如若MATCH到的节点多于2个,则对所有两两节点创建关系;
  • 每创建一次关系,节点间就多一条关系,即便这些关系都是同一关系;
  • 如MATCH不到对应的两节点,则创建为空。

2.2 向现有节点(关系)添加(更新)属性

关键字:SET,句法如下:

SET .,
    .,
    ...
    .,
    .,
    ...

  举例1:向节点添加属性。

       给已存在的person类型中名为"Tom Hanks"的节点添加三个新属性:年纪=60,国家=USA,结婚?=Yes。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第6张图片

     ★注意:

  • set可以同时向一个节点添加多个新属性,并用逗号分隔
  • 如某个属性已存在,则set之后属性值被更新;
  • set 后的列表可以是节点的、关系的或者两者混合。 

 举例2:向已有关系的添加属性。

        名为Tom Hanks的节点与某电影节点存在关系"DIRECTED",给这个关系添加新属性:year=2021(这里以date()形式添加,故默认日期为2021-01-01)。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第7张图片

 举例3:同时向节点和关系添加属性。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第8张图片

 

三、删除节点、关系、属性

3.1 删除节点OR关系

关键字:DELETE这里删除节点的前提是该节点独立,即没有与其他节点的关系!句法如下:

//删除节点
MATCH (node_name: node_label_name{property_name:value,...})
DELETE node_name

//删除关系
MATCH (node1_name:node_label_name)-[rel:relationship_name]-(node2_name:node2_label_name)
DELETE rel

举例:

        存在两个节点:node1名为Jennifer(label: person),node2名为Graphs(label:technology),两者之间的关系:rel:node1- LIKES - Graphs。 

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第9张图片

         此时,如直接MATCH后删除node1则会出错。Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第10张图片

         为此,需MATCH到整个模式,然后同时删除node1和rel。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第11张图片

         上图可见删除成功!

3.2 删除节点和关系

方法一、MATCH模式然后DELETE节点和关系,见上。

方法二、MATCH节点,DETACH DELETE 节点,该方法删除的节点及该节点的所有关系,句法如下:

MATCH(node_name:node_label_name{properties-names-list})
DETACH DELETE node_name

 举例:

       删除节点名为jennifer的节点及其关系(如有多个关系,则会全部删除)。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第12张图片

 3.3 删除属性

 方法一、使用关键字:REMOVE,句法如下:

MATCH(node_name:node_label_name)
REMOVE node_name.property_name 

举例:

       现有一个节点p(label为person,属性为{"name":"Jennifer","birthdate":"1990-01-01"}),现在删除其中的birthdate属性。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第13张图片

方法二、使用SET property.value = null,该方法利用了Neo4j默认null表示不存在的特点。

 举例:上述例子也可以写成:

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第14张图片

 

 四、重复问题

       上文提到,CREATE可以创建出两个完全一样的节点(除了neo4j为其分配的id不同)和完全相同的关系,不存在重复创建属性的问题,因为属性以SET赋的最新值为准。

4.1 重复创建节点的问题

        如果需要新节点不重复创建,可使用关键字:MERGE,MERGE先检索数据库中是否有该节点,如有则不重新创建,如没有则创建该节点,句法如下:

MERGE(node_name:node_label_name{properties_list})

        举例:

        如节点node{name:"lily"}不存在,则MERGE之后创建该节点:

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第15张图片

   ★注意:

  • 如节点node{name:"lily"}已存在,则MERGE之后不再创建该节点;
  • MERGE节点不需要先MATCH,这与MERGE关系不同(见4.2);
  • 如节点的属性不完全一致,例如待创建节点node{name:"lily", age:27},则MERGE之后仍创建该节点,如下图所示。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第16张图片

 4.2 重复创建关系的问题

        关键字:MATCH+MERGE,句法如下:

MATCH(node1_name:node1_label_name)
MATCH(node2_name:node2_label_name)
MERGE (node1_name)-[rel:relationship_value]-(node2_name)
  •  如node1与node2之间不存在rel关系,则创建该关系;
  • 如node1与node2之间存在rel关系,则不创建该关系;
  • 这里需要先MATCH到两个节点,如果直接用MERGE(node1)-[rel]-(node2),则MERGE的是该模式,而不是关系rel。

        举例:

        已知node1{name:"Jennifer"}是node2{name:"Tom"}的朋友(rel:IS_FRIENDS_WITH},则MERGE(node1)-[rel:IS_FRIENDS_WITH]-(node2)不创建新的关系: 

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第17张图片

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第18张图片

4.3  MERGE过程中修改或添加属性

在MERGE的两步(MATCH 或 CREATE)过程中,可以对属性进行修改或新增属性,句法如下:

MERGE node1_name:node1_label_name)-[rel:relationship]-(node2_name:node2_label_name)
ON MATCH SET XXX_name.property = value
ON CREATE SET XXX_name.property = value
  •  当MERGE后的模式存在,即仅执行MATCH时,则仅执行ON MATCH SET 语句(不执行ON CREATE SET);
  • 当MERGE后的模式不存在时,即执行CREATE时,则仅ON CREATE SET语句(不执行ON MATCH SET);
  • XXX:可以是Node、Relationship。

        举例:

        现有节点1:person{name:"Jennifer", birthdate:"12/12/1990"} 和 节点2:person{name:"Tom"},关系:(node1)-[rel:IS_FRIENDS_WITH]->(node2),则MERGE该模式后,仅执行ON MATCH SET语句,即:node1被添加新属性{nation:"CHICAGO"}。

Neo4j 学习笔记:创建、更新、删除节点/关系/属性_第19张图片

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(neo4j)