继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

知识存储-图数据库构建

大话西游666
关注TA
已关注
手记 209
粉丝 140
获赞 620

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 *

效果如下图所示:

https://img1.mukewang.com/5b5bdacb000132fd11830445.jpg

3、merge操作

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


  • 使用merge进行查询操作,此时该节点存在

merge(p:明星{name:"郭德纲"}) return p

查询结果如下:

https://img4.mukewang.com/5b5bdad200018d8811520324.jpg


  • 使用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 = 20return *
  • merge与create,match搭配使用

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

merge(p:明星{name:"孟鹤堂",age:18})on create set p.age = 21on match set p.age = 20return *
  • merge新建关系

match(p:明星{name:"孟鹤堂"}),(p1:明星{name:"郭德纲"}),(p2:明星{name:"岳云鹏"})merge (p1)-[r:老师]->(p)<-[r1:师兄弟]-(p2)return *

结果如下图所示:

https://img.mukewang.com/5b5bdadc0001c51b11580402.jpg

  • merge任意方向的关系

match(p:明星{name:"孟鹤堂"}),(p1:明星{name:"郭麒麟"})merge (p1)-[r:师兄弟]-(p)return *

查询结果如下图所示:

https://img2.mukewang.com/5b5bdae7000140de11660403.jpg

  • merge与match搭配达到建立一个两个已有节点的关系

match(p:明星{name:"岳云鹏"})merge(p1:明星{name:"郭麒麟",age:18})merge (p1)-[r:师兄弟]->(p)-[r1:师兄弟]->(p1)return *

执行效果如下:

https://img3.mukewang.com/5b5bdaf10001a48d11790403.jpg

  • 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=20return *
  • 使用set删除属性

match(p:明星{name:"岳云鹏"})set p.age=NULLreturn *


4、使用delete删除节点


  • 删除没有关系的节点

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

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

https://img2.mukewang.com/5b5bdafa00015d1611150206.jpg

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

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

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


  • 使用remove删除属性

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

match(p:明星{name:'张云雷',age:18})remove p:明星return p

原文出处:https://blog.csdn.net/amao1998/article/details/81017560

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP