知识存储-图数据库构建

1、概述

之前章节的内容都是对已有的图数据库进行查询,但是进行查询的前提是,已经构建好了一个图形数据库。构建图形数据库同样是一个非常关键的步骤,本章主要介绍对节点、关系、属性的增删改。

2、create操作

  • 新增节点

在创建节点时,可以创建单个节点和多个节点,请参照下面代码

create (m)
create (x),(y)

但是这样的节点毫无意义,所以最基本的应该创建一个带标签的节点,请参照以下代码

create(n:明星)
create(n:明星:导演)

同时也可以创建带有属性的节点

create(n:明星{name:'郭德纲',born:'1973'})

也可以在创建好节点之后返回结果

create(n:明星{name:'岳云鹏',born:'1985'}) return n
  • 新增关系
match(a:明星{name:'郭德纲'}),(b:明星{name:'岳云鹏'})
create (a)-[r:老师]->(b),(b)-[r1:学生]->(a)
return *

效果如下图所示:


3、merge操作

merge操作可以认为是create与match的组合,在进行merge操作的时候,会检测符合指定模式的节点是否存在,如果存在就锁定该节点进行下一步操作。如果不存在就创建一个新节点并锁定他。

  • 使用merge进行查询操作,此时该节点存在
merge(p:明星{name:"郭德纲"}) return p

查询结果如下:

  • 使用merge创建节点,此时该节点不存在
merge(p:明星{name:"郭麒麟"}) return p
  • merge与create搭配使用

如果我们不想创建重复的节点,可以使用这种搭配,在创建新节点时会检测是否有相同属性的节点存在,请参照如下代码:

merge(p:明星{name:"郭麒麟",age:18}) 
on create set p.sex = '男'
return *

执行该代码时,并没有成功是因为制定的节点已经存在,无法重新创建,但下面代码就能够执行成功

merge(p:明星{name:"孟鹤堂",age:18}) 
on create set p.sex = '男'
return *
  • merge与match搭配使用

如果我们想设置已经存在的节点的属性,在节点不存在时不需要创建时,可以使用该语句

merge(p:明星{name:"孟鹤堂",age:18}) 
on match set p.age = 20
return *
  • merge与create,match搭配使用

如果想达到如果节点不存在就创建并设置其属性,如果存在就查找并设置属性的话,可以参照如下代码:

merge(p:明星{name:"孟鹤堂",age:18}) 
on create set p.age = 21
on match set p.age = 20
return *
  • merge新建关系
match(p:明星{name:"孟鹤堂"}),(p1:明星{name:"郭德纲"}),(p2:明星{name:"岳云鹏"})
merge (p1)-[r:老师]->(p)<-[r1:师兄弟]-(p2)
return *

结果如下图所示:


  • merge任意方向的关系
match(p:明星{name:"孟鹤堂"}),(p1:明星{name:"郭麒麟"})
merge (p1)-[r:师兄弟]-(p)
return *

查询结果如下图所示:


  • merge与match搭配达到建立一个两个已有节点的关系
match(p:明星{name:"岳云鹏"})
merge(p1:明星{name:"郭麒麟",age:18})
merge (p1)-[r:师兄弟]->(p)-[r1:师兄弟]->(p1)
return *

执行效果如下:


  • merge与match搭配达到建立一个已有节点与一个不存在的节点的关系
match(p:明星{name:"岳云鹏"})
merge(p1:明星{name:"张云雷",age:18})
merge (p1)-[r:师兄弟]->(p)-[r1:师兄弟]->(p1)
return *

3、set修改节点属性与关系

  • 使用set修改属性
match(p:明星{name:"岳云鹏"})
set p.age=20
return *
  • 使用set删除属性
match(p:明星{name:"岳云鹏"})
set p.age=NULL
return *

4、使用delete删除节点

  • 删除没有关系的节点
match(p:明星)
where p.name is  NUll 
delete p
  • 删除已经存在关系的节点

如果节点已经存在关系,在删除节点时会出现下列错误


此时应该使用下面语句进行删除:

match(p:明星{name:'张云雷'})
detach delete p

5、使用remove删除标签与属性

  • 使用remove删除属性
match(p:明星{name:'张云雷',age:18,alias:"二爷"})
remove p.alias
return p
  • 使用remove删除标签(谨慎使用)
match(p:明星{name:'张云雷',age:18})
remove p:明星
return p



猜你喜欢

转载自blog.csdn.net/amao1998/article/details/81017560