图数据库Neo4J入门——Neo4J下载安装+Cypher基本操作+《西游记》人物关系图实例

这里写目录标题

  • 一、效果图
  • 二、环境准备
  • 三、数据库设计
    • 3.1 人物节点设计
    • 3.2 关系设计
  • 四、操作步骤
    • 4.1 下载、安装、启动Neo4J服务
      • 4.1.1 配置Neo4J环境变量
      • 4.1.2 启动Neo4J服务器
      • 4.1.3 启动Ne04J客户端
    • 4.2 创建节点
    • 4.3 创建关系(从已有节点创建关系)
    • 4.4 查询节点
    • 4.5 查询关系
    • 4.6 删除节点与关系

善始者繁多,克终者盖寡。

Neo4J属于NoSQL数据库的一种,具体来说属于图数据库,以存储类型划分常见的数据库分类如图所示。

在这里插入图片描述

在Neo4J中节点、关系、标签共同组成了一张图,图中每个元素有具有各自的属性,Neo4J与MySQL中名词解释可以对照如下表格。在MySQL中使用SQL实现增删改查等功能,在Neo4J中使用Cypher来实现,所以Cypher又称“CQL”。

MySQLNeo4J
数据库
标签
记录节点
属性属性
XXX关系
SQL(Structured Query Language)CQL (Cypher Query Language)

本文使用Neo4J绘制《西游记》中部分人物关系图。

一、效果图

使用Neo4J数据库绘制《西游记》中唐三藏、孙悟空、猪八戒、沙悟净、玉皇大帝、太白金星、如来佛祖、菩提老祖等8位人物的关系图。实现效果如图所示:

在这里插入图片描述

二、环境准备

Neo4J是一款基于java开发的数据库产品,运行Neo4J必须安装jdk。jdk1.8支持Neo4J的最后一个版本为3.5,高版本Neo4J需要高版本jdk,低版本Neo4J会兼容高版本jdk,官方文档可以看Neo4J官方文档。
本例中JDK版本为1.8,Neo4J版本为3.5,其他版本Neo4J可以在仓库下载。

三、数据库设计

3.1 人物节点设计

此例涉及《西游记》中8名角色,所以图中包含8个节点,各节点属性及其关系如图所示。

在这里插入图片描述

3.2 关系设计

此例中8个人物共产生了6种18个关系,各关系起止节点如图所示。

在这里插入图片描述

四、操作步骤

在写代码前我们先简单说明Neo4J和Cypher的关系。

  1. Neo4J是一款基于JAVA开发的数据库产品,Cypher是一种查询语言,Neo4J中的操作通过Cypher语言实现
  2. Neo4J与Cypher的关系类似于MySQL和SQL的关系,所以Cypher也被叫做CQL。

4.1 下载、安装、启动Neo4J服务

4.1.1 配置Neo4J环境变量

依次点击“此电脑-属性-高级系统设置-环境变量-Path”, 在Path中加入“E:\neo4j-community-3.5.0\bin”。

4.1.2 启动Neo4J服务器

以管理员身份打开命令行,输入“neo4j”,此时页面会返回“console | start”等指令,输入“neo4j console”启动neo4j服务器,服务器启动成功会显示“Remote interface available at http://localhost:7474/”。(可以将Neo4J注册为本地服务,让它开机自启动,本例中未进行此操作)

服务器地址为:127.0.0.1:7687

在这里插入图片描述

4.1.3 启动Ne04J客户端

在浏览器“localhost:7474”启动neo4j客户端。

localhost:7474

初次启动需要输入密码,初始密码为“neo4j”,登录成功后界面如图所示。(注意:初次登录需要修改密码,修改密码不能为“neo4j”)后续操作均在客户端中进行,在Neo4J中可以批量执行指令,但是此例中使用了相同的变量名,所有不能一次复制多行代码并执行,请逐条执行。

在这里插入图片描述

4.2 创建节点

create(m:`西游记`{ name:"唐三藏",type:"主角团",曾工作单位:"佛教"}) return m
create(m:`西游记`{ name:"孙悟空",type:"主角团",曾工作单位:"天庭"}) return m
create(m:`西游记`{ name:"猪八戒",type:"主角团",曾工作单位:"天庭"}) return m
create(m:`西游记`{ name:"沙悟净",type:"主角团",曾工作单位:"天庭"}) return m
create(m:`西游记`{ name:"玉皇大帝",单位:"天庭"}) return m
create(m:`西游记`{ name:"太白金星",单位:"天庭"}) return m
create(m:`西游记`{ name:"如来佛祖",单位:"佛教"}) return m
create(m:`西游记`{ name:"菩提老祖",单位:"佛教"}) return m

名为“唐三藏”的节点截图如下所示。

在这里插入图片描述

代码解析:

create(m:`西游记`{ name:"唐三藏",type:"主角团",曾工作单位:"佛教"}) return m
  1. 使用create指令创建节点,范围为小括号内的所有东西
  2. m为该节点的变量名,可随意取名
  3. “西游记”是该节点所属的标签,在文字左右均使用单撇号括起来
  4. “{}”内为节点的属性名称及其取值
  5. return指令用于在屏幕上显示该节点,可以不要

4.3 创建关系(从已有节点创建关系)

match(m{ name:"唐三藏"}),(n{ name:"孙悟空"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"唐三藏"}),(n{ name:"猪八戒"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"唐三藏"}),(n{ name:"沙悟净"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"唐三藏"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"菩提老祖"}),(n{ name:"孙悟空"}) create (m)-[r:师傅]->(n) return r
match(m{ name:"孙悟空"}),(n{ name:"猪八戒"}) create (m)-[r:师兄]->(n) return r
match(m{ name:"孙悟空"}),(n{ name:"沙悟净"}) create (m)-[r:师兄]->(n) return r
match(m{ name:"猪八戒"}),(n{ name:"沙悟净"}) create (m)-[r:师兄]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"孙悟空"}) create (m)-[r:上司]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"猪八戒"}) create (m)-[r:上司]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"沙悟净"}) create (m)-[r:上司]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"太白金星"}) create (m)-[r:上司]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"孙悟空"}) create (m)-[r:恩人]->(n) return r
match(m{ name:"太白金星"}),(n{ name:"孙悟空"}) create (m)-[r:恩人]->(n) return r
match(m{ name:"玉皇大帝"}),(n{ name:"如来佛祖"}) create (m)-[r:朋友]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"玉皇大帝"}) create (m)-[r:朋友]->(n) return r
match(m{ name:"如来佛祖"}),(n{ name:"菩提老祖"}) create (m)-[r:同事]->(n) return r
match(m{ name:"菩提老祖"}),(n{ name:"如来佛祖"}) create (m)-[r:同事]->(n) return r

效果图如下所示:
在这里插入图片描述
代码解析:

match(m{ name:"唐三藏"}),(n{ name:"孙悟空"}) create (m)-[r:师傅]->(n) return r
  1. match指令用于查询对应节点,作用范围为小括号内,多个节点通过逗号分隔开
  2. m、n是给拟查询节点起的别名,“{}”内表示查询的条件
  3. create指令用于创建关系
  4. “[r:师傅]”中r表示关系的别名,“师傅”是真正的关系名称,(m)(n)表示前面查询的两个节点
  5. return指令用于在屏幕上显示该关系,可以不要

4.4 查询节点

①查询所有节点

match(m) return m

②查询《西游记》中的节点

match(m:`西游记`) return m

③查询主角团

match(m) where m.type="主角团" return m

执行该指令会显示满足条件的所有节点。

在这里插入图片描述
④查询单位在天庭的角色(包含曾今在天庭的)

当包含多个查询条件时可以使用where指令指定查询条件。

match(m) where m.单位="天庭" or m.曾工作单位="天庭" return m

⑤查询单位在佛教的角色(包含曾今在佛教的)

match(m) where m.单位="佛教" or m.曾工作单位="佛教" return m

4.5 查询关系

①查询所有关系及关系对应的节点

match r=(m)-->(n) return r

②查询名为“师傅”的关系

match (m)-[r:师傅]->(n) return r

此例中所有关系均无属性,所有查询结果均为一对空括号。

在这里插入图片描述

③查询名为“师傅”的关系及关系对应的节点

match p=(m)-[r:师傅]->(n) return p

在这里插入图片描述
④查询名为“上司”的关系

match (m)-[r:上司]->(n) return r

⑤查询名为“上司”的关系及关系对应的节点

match p=(m)-[r:上司]->(n) return p

4.6 删除节点与关系

删除节点前需要先找到该节点并删除与之有关的“关系”否则会报错,例如:直接删除“太白金星”这个节点。这类似于在MySQL中删除某张表之前需要先删除该表中所有的外键及其他约束。

在这里插入图片描述
①查询“太白金星”为起始节点的关系

match (m{name:"太白金星"})-[r]->(n) return r

②查询“太白金星”为终止节点的关系

match (m{name:"太白金星"})<-[r]-(n) return r

③删除与“太白金星”有关的所有关系(边删边验证)

match (m{name:"太白金星"})-[r]->(n) delete r
match(m) return m
match (m{name:"太白金星"})<-[r]-(n) delete r
match(m) return m

④删除名为“太白金星”的节点

match(m{name:"太白金星"}) delete m
match(m) return m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PhpStorm2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 PhpStorm是由JetBrains公司开发的一款商业的PHP集成开发环境&#xff08;IDE&#xff09;&#xff0c;深受全球开发人员的喜爱。它旨在提高开发效率&#xff0c;通过深刻理解用户的编码习惯&#xff0c;提供智能代码补全、快速导…

Java面试八股文(JVM篇)(❤❤)

Java面试八股文_JVM篇 1、知识点汇总2、知识点详解&#xff1a;3、说说类加载与卸载11、说说Java对象创建过程12、知道类的生命周期吗&#xff1f;14、如何判断对象可以被回收&#xff1f;17、调优命令有哪些&#xff1f;18、常见调优工具有哪些20、你知道哪些JVM性能调优参数&…

vue的就地更新与v-for的key属性

vue的就地更新 Vue中的就地更新到底是怎么回事&#xff0c;为什么会存在就地更新的现象&#xff1f; 注意下面的例子&#xff0c;使用v-for指令时&#xff0c;没有绑定key值&#xff0c;才有就地更新的现象&#xff0c;因为Vue默认按照就地更新的策略来更新v-for渲染的元素列表…

CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—MIME绕过、00截断、00截断-双写后缀&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—MIME绕过、00截断、00截断-双写后缀&#xff09;前端验证—MIME绕过有关MIMEMIME的作用 解题时有…

元宇宙VR虚拟线上展馆满足企业快速布展的需要

想要拥有一个VR线上虚拟展馆&#xff0c;展现您的城市风采或企业特色吗? 相比实体展馆搭建&#xff0c;VR线上虚拟展馆投入资金少&#xff0c;回报周期短&#xff0c;只需几个月的时间&#xff0c;您就能开始资金回笼。那么一个VR线上虚拟展馆多少钱呢? 深圳VR公司华锐视点基…

bp神经网络拟合函数未知参数【源码+视频教程】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

无人零售行业展望:智能化与便利性引领未来

无人零售行业展望&#xff1a;智能化与便利性引领未来 无人零售&#xff0c;这一依靠智能化技术如人工智能、物联网、和大数据的零售模式&#xff0c;正逐步成为全球零售行业的新趋势。该模式允许消费者在没有店员的情况下自助完成购物&#xff0c;提供了24小时服务&#xff0…

IO、存储、硬盘、文件系统相关常识

目录 IO 文件系统 文件在硬盘上的存储 IO IO&#xff0c;就是Input和Output&#xff0c;即输入和输出操作。我们的电脑可以通过网络下载文件&#xff0c;也可以通过网络上传文件。通过网络下载文件就是输入操作&#xff0c;上传文件就是输出。如何区分输入和输出呢&#xf…

负载均衡的原理及算法简介

负载均衡&#xff08;Load Balancing&#xff09;是一种用于在多台服务器之间分配网络流量的技术&#xff0c;旨在优化系统资源利用率、提高服务可用性、增强系统的伸缩性和容错能力。其基本原理是将来自客户端的请求分散到一个服务器集群中的各个服务器上&#xff0c;而不是让…

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用

前言&#xff1a; postgresql的调优是比较重要的&#xff0c;那么&#xff0c;如何调优呢&#xff1f;自然是在某一个时间段内&#xff0c;通常是业务高峰期或者压测时间内实时观察数据库的运行情况&#xff0c;然后通过观察到的信息判断数据库的瓶颈&#xff0c;比如&#xf…

通过adb 命令打印安装在第三方模拟器上的log

1&#xff0c;环境&#xff1a;Windows 11 &#xff0c;第三方模拟器 网易的MuMu 步骤&#xff1a; 1&#xff0c;打开cmd&#xff0c;输入 adb connect 172.0.0.1:7555 2&#xff0c;在cmd&#xff0c;再次输入adb logcat 回车

简单了解 HTTP 基础知识

HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于在网络上传输数据的一种协议&#xff0c;对于网络开发人员来说&#xff0c;理解这一协议是至关重要的。由于其广泛的应用&#xff0c;除了在网页应用传输数据之外&#xff0c;它还被应…

算法学习——LeetCode力扣补充篇8(146. LRU 缓存、 215. 数组中的第K个最大元素、25. K 个一组翻转链表)

算法学习——LeetCode力扣补充篇8 146. LRU 缓存 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化…

weblogic JSP action的配置

action(如xxx.do&#xff09;可以在Java文件中通过注解的方式配置&#xff0c;也可以在web.xml中进行配置 在java文件中配置的场合 WebServlet(xxxx.do) 并实现支持的方法&#xff1a;doGet或doPost等 或者 WebServlet(xxxx.do) 并实现service方法 所有method的处理方法都会…

华为 2024 届实习招聘——硬件-电源机试题(四套)

华为 2024 届实习招聘——硬件-电源机试题&#xff08;四套&#xff09; 部分题目分享&#xff0c;完整版带答案(有答案&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共四套&#xff09; 获取&#xff08;WX:didadidadidida313&…

【保姆级讲解docker 的常用命令】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

设计模式-命令模式(Command)

1. 概念 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;也被称为动作模式或事务模式。它的核心思想是将一个请求封装成一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化。对请求排队或记录&#xff0c;以及支持可撤销的操作…

Excel高效办公:人力资源管理(AI版)

AI人力资源管理一本通&#xff1a;147个“温馨提示”53个“教您一招”&#xff0c;掌握使用Excel高效完成人力资源管理工作的“心法”&#xff0c;助你早做完、不加班。 一本书掌握人力资源高效管理的“心法”&#xff01; 案例丰富&#xff0c;参考性强&#xff1a;本书不是…

Web3与社会契约:去中心化治理的新模式

在数字化时代&#xff0c;技术不断为我们提供新的可能性&#xff0c;而Web3技术作为一种基于区块链的创新&#xff0c;正在引领着互联网的下一波变革。它不仅改变了我们的经济模式和商业逻辑&#xff0c;还对社会契约和权力结构提出了全新的挑战和思考。本文将深入探讨Web3的基…

excel 无法正确处理 1900-03-01 前的日期

问题由来&#xff1a;excel 用公式 TEXT(A1,"yyyy-mm-dd") 转日期时&#xff0c;当A1 的值等于59 的时候&#xff0c;返回值是1900-02-28&#xff1b;当A1 的值等于61 的时候&#xff0c;返回值是1900-03-01&#xff1b;那么当 A1的值为 60 的时候&#xff0c;返回值…