Neo4j图形数据库-Cypher中常用指令
一、创建与修改
1.1 create
- 创建图数据库中的节点、关系等元素:
CREATE (:Person {name: "Alice", age: 30})
CREATE (p1:Person {name: "Bob"})-[r:KNOWS]->(p2:Person {name: "Charlie"})
- 批量创建元素
CREATE (n1:Node),(n2:Node),(n3:AnotherNode {prop: "value"})
1.2 merge
- 不存在再创建,如果存在则直接返回已有元素,常用来避免重复创建相同的数据。
(若数据库中没有 name 为 “David” 的Person 节点,就会创建一个;若已经存在,就返回这个已有的节点,可用于保证特定节点在数据库中的唯一性):
MERGE (p:Person {name: "David"})
- 检查公司与员工之间的 WORKS_AT 关系是否存在,不存在就创建:
MERGE (c:Company {name: "TechCo"})<-[r:WORKS_AT]-(e:Employee {name: "Eve"})
1.3 set
- 更新节点或关系的现有属性值:
MATCH (p:Person {name: "Alice"})
SET p.age = 35
- 添加新属性:
MATCH (p:Person {name: "Bob"})
SET p.address = "123 Main St"
二、查询
2.1 match
- 在图中查找符合特定模式的节点、关系等元素:
MATCH (p:Person)
WHERE p.age > 25
RETURN p
- 查找带有特定关系的节点:
MATCH (p1:Person)-[r:KNOWS]->(p2:Person)
RETURN p1, r, p2
- 复杂模式匹配:可以构建包含多个节点、多种关系以及属性筛选条件等的复杂查询模式:
MATCH (p1:Person)-[r1:KNOWS]->(p2:Person)-[r2:WORKS_AT]->(c:Company)
WHERE p1.name = "Alice" AND c.name = "TechFirm"
RETURN p1, p2, r1, r2, c
2.2 return
- 指定查询结束后要返回的数据内容,可以返回节点、关系、属性值等各种元素:
MATCH (p:Person)
RETURN p.name, p.age
- 使用聚合函数返回结果:
MATCH (p:Person)
RETURN count(p)
- 返回不同类型元素:可以返回多种不同类型的元素混合在一起:
MATCH (p:Person)-[r:KNOWS]->(p2:Person)
RETURN p, r, p2.name
2.3 where
- 作为筛选条件的添加指令,常配合 MATCH 使用,用来限定查询结果需满足的条件:
MATCH (p:Person)
WHERE p.name STARTS WITH "A" AND p.age < 40
RETURN p
- 支持多种比较运算符(如 =、>、<、>=、<=、<> 等)以及逻辑运算符(AND、OR、NOT 等)来构建复杂的筛选条件。
MATCH (p:Person)
WHERE p.name STARTS WITH "A" AND p.age < 40
RETURN p
三、删除
3.1 delete
- 删除图数据库中的节点、关系等元素:
MATCH (p:Person {name: "Charlie"})
DELETE p
- 删除关系:
MATCH (p1:Person)-[r:KNOWS]->(p2:Person)
DELETE r
3.2 remove
- 移除节点或关系上的属性:
MATCH (p:Product)
REMOVE p.description
四、数据导入与加载
4.1 load csv
- 从 CSV 文件中加载数据到图数据库中,常配合 CREATE 等指令来基于导入的数据创建节点或关系:
(从本地 data.csv 文件(有表头的情况)读取每行数据,然后创建对应的 :User 节点并设置属性。)
LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
CREATE (:User {name: row.name, email: row.email})
五、聚合与分组
5.1 group by
- 类似于关系型数据库中的分组功能,用于按照指定的属性或表达式对查询结果进行分组,常配合聚合函数使用。
MATCH (p:Person)
RETURN p.age, count(p)
GROUP BY p.age
5.2 order by
- 对查询返回的结果按照指定的属性或表达式进行排序,可以指定升序(ASC)或降序(DESC):
MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC
六、函数
6.1 聚合函数
- count():用于统计节点、关系等元素的数量;
- sum():对指定属性值进行求和;
- avg():计算属性值的平均值;
- min() 和 max():分别获取属性值的最小值和最大值。
MATCH (p:Person)
RETURN count(p)MATCH (p:Product)
RETURN sum(p.price)MATCH (p:Product)
RETURN avg(p.price)MATCH (p:Product)
RETURN min(p.price), max(p.price)
6.2 字符串函数
- LEFT()、RIGHT():分别用于获取字符串左边或右边指定长度的子字符串;
- SUBSTRING():截取字符串中间的部分;
- UPPER()、LOWER():将字符串转换为大写或小写形式:
MATCH (p:Person)
RETURN LEFT(p.name, 3)MATCH (p:Person)
RETURN SUBSTRING(p.name, 2, 4)MATCH (p:Person)
RETURN UPPER(p.name)
6.3 数学函数
- ROUND():对数值进行四舍五入;
- ABS():求绝对值;
MATCH (p:Product)
RETURN ROUND(p.price)MATCH (p:Product)
WHERE p.price < 0
RETURN ABS(p.price)
6.4 类型转换函数
- toFloat()、toInteger() 等:用于将属性值在不同数据类型之间进行转换:
MATCH (p:Product)
SET p.price = toFloat(p.price)
6.5 列表函数
- size():用于获取列表类型属性的元素个数:
MATCH (p:Person {hobbies: ["reading", "swimming"]})
RETURN size(p.hobbies)
七、路径操作与相关函数
7.1 路径查找与表示
- 使用路径表达式来描述节点之间的连接关系以及查找符合特定路径模式的元素:
(查找从一个 :Node 节点出发,通过 1 到 3 条关系能够到达另一个 :Node 节点的所有路径,并返回这些路径。)
MATCH p=(n:Node)-[*1..3]->(m:Node)
RETURN p
7.2 路径相关函数
- length():用于计算路径的长度(即路径中包含的关系数量):
MATCH p=(n:Node)-[*]->(m:Node)
RETURN length(p)
- nodes() 和 rels():分别用于获取路径中的节点列表和关系列表:
MATCH p=(n:Node)-[*]->(m:Node)
RETURN nodes(p), rels(p)
八、索引与约束
8.1 create index
- 创建索引,提高基于特定属性的查询效率:
(为 :Person 节点的 name 属性创建索引,后续查询中如果频繁通过 name 属性查找 :Person 节点,速度会更快。)
CREATE INDEX FOR (p:Person) ON (p.name)
8.2 create constraint
- 创建约束条件,常见的如唯一性约束,确保某个属性在特定标签的节点中具有唯一性。
(保证 :Person 节点的 email 属性值在整个数据库中是唯一的,避免重复创建具有相同 email 属性的 :Person 节点。)
CREATE CONSTRAINT ON (p:Person) ASSERT p.email IS UNIQUE
九、事务与执行控制
9.1 begin、commit、rollback
- BEGIN:用于开启一个事务,在事务内可以执行多条 Cypher 语句;
- COMMIT 用于提交事务,使事务内对数据的修改操作生效;
- ROLLBACK 用于回滚事务,撤销事务内已经执行的操作,恢复到事务开始前的数据状态。
BEGIN
CREATE (:TempNode {name: "Temp"})
// 其他操作
COMMIT
9.2 explain、profile
- EXPLAIN:用于获取查询语句的执行计划信息,展示数据库将如何执行该查询,帮助分析查询性能、优化查询逻辑,但并不实际执行查询。
EXPLAIN MATCH (p:Person)
RETURN p
- PROFILE:不仅能获取执行计划,还会实际执行查询,并展示查询执行过程中的性能相关数据,比如各操作花费的时间等,方便定位查询性能瓶颈。
PROFILE MATCH (p:Person)
RETURN p
以上涵盖了 Cypher 语言的大部分主要功能和指令,不过不同的图数据库系统在对 Cypher 语言的具体实现、支持程度以及语法细节等方面可能会存在一定差异,实际使用时需要结合具体的数据库平台来准确应用这些功能和指令。
相关文章:
Neo4j图形数据库-Cypher中常用指令
一、创建与修改 1.1 create 创建图数据库中的节点、关系等元素: CREATE (:Person {name: "Alice", age: 30}) CREATE (p1:Person {name: "Bob"})-[r:KNOWS]->(p2:Person {name: "Charlie"})批量创建元素 CREATE (n1:Node),(n2…...
linux安全管理-防火墙配置
1. 开启系统防火墙 1、检查内容 检查操作系统是否开启防火墙; 2、配置要求 操作系统开启防火墙; 3、配置方法 systemctl status firewalld ##查看系统防火墙运行状态 systemctl start firewalld ##启动防火墙 systemctl restart firewalld ##重启防火墙…...
什么是BIOS
BIOS(Basic Input/Output System,基本输入输出系统)是计算机启动过程中的一个关键组件,主要负责硬件的初始化和系统的引导。以下是关于 BIOS 的一些详细信息: 1. 基本功能 硬件初始化:当计算机启动时&…...

c++视频图像处理
打开视频或摄像头 打开指定视频 /*VideoCapture(const String &filename, apiPreference);filename:读取的视频或者图像序列的名称apiPreference:读取数据时设置的属性*/ VideoCapture video; //定义一个空的视频对象 video.open("H:/BaiduNetdiskDownlo…...

音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域
注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 当TS Header中的adaptation_field_control属性的值为10或11 时,TS Header包含adaptation field(适配域): 根据《T-RE…...

基于stm32单片机的教室节能系统设计
功能描述 0. STM32F103C8T6单片机为控制核心 1. OLED液晶显示当前年 月 日 时 分 秒 星期 2. 按键可以设置定时时间 3. 按键可以设置用电开关的开启和关闭时间,实现设备的节能 4. 通过红外遥控可以打开关闭空调设备(通过继电器开关闭合模拟&#x…...
mini主机通过内网穿透做成服务器
文章目录 简介1.ubuntu 的ssh server 安装2.ubuntu 的docker 安装3.ubuntu的curl的安装4.ubuntu的frp客户端安装5.ubuntu的docker compose安装6.声明 简介 主要目的 本地设备做成服务器,实现ssh远程登录以及内网穿透设备总成本1千多元(其实部分设备可以…...

智能桥梁安全运行监测系统守护桥梁安全卫士
一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分,其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道,更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行,桥梁安…...

Selenium和Pyppeteer有什么区别?
Selenium和Pyppeteer都是自动化测试工具,它们可以模拟用户在浏览器中的操作,但它们之间存在一些关键的区别: Selenium 跨浏览器支持:Selenium支持多种浏览器,包括Chrome、Firefox、Internet Explorer等,而…...
82从零开始学Java之异常处理机制简介
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 大家可以想一个问题,有没有谁能够做到开发项目时一个错误都不发生?如果谁能够做到这一点,那他可能真的是“天才”!但实际上,任何人都不可能在项目开发…...

Git上传本地项目到远程仓库(gitee/github)
目录 序言一、创建git本地版本库二、连接远程仓库(以gitee为例)三、将项目提交到git(本地)版本库1.由工作区添加到暂存区2.由暂存区添加到版本库 四、将代码由本地仓库上传到 gitee远程仓库1.获取远程库与本地同步2.把当前分支 ma…...

华为仓颉编程环境搭建
1、仓颉介绍 摘自华为官方:仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…...
UE5 Line Trace By Channel(通道线条追踪)节点
在 Unreal Engine 5 (UE5) 中,Line Trace By Channel 是一个常用于进行物理射线检测(raycasting)的节点。它会沿着一条从起点到终点的直线发射一条射线,并检测射线与世界中任何物体的碰撞。这个节点广泛应用于枪械射击、检测物体、…...

DroneCAN 最新开发进展,Andrew在Ardupilot开发者大会2024的演讲
本文是Andrew演讲的中文翻译,你可以直接观看视频了解演讲的全部内容,此演讲视频的中文版本已经发布在Ardupilot社区的Blog板块,你可以在 Arudpilot官网(https://ardupilot.org) 获取该视频: 你也可以直接通过Bilibili链…...

UDP客户端服务器通信
在这篇博客中,我们将探索 UDP(用户数据报协议) 通信,简要地说,UDP 是一种无连接、快速但不可靠的通信协议,适用于需要快速数据传输但对丢包容忍的场景,比如视频流和在线游戏。就像《我是如此相信…...
适合中小型公司的自动化测试的测试框架,OpenSourceTest
适合中小型公司的自动化测试的测试框架,OpenSourceTest 文档地址: http://docs.opensourcetest.cn/代码仓库: https://github.com/chineseluo/opensourcetest安装方式: pip3 install opensourcetest -i https://pypi.tuna.tsin…...
实现跨语言通信:Rust 和 Thrift 的最佳实践
前言 在分布式系统中,服务之间高效且安全的通信至关重要。Apache Thrift 是一个被广泛应用的跨语言 RPC(远程过程调用)框架,它支持多种编程语言,包括 Rust。Rust 以其卓越的性能和内存安全保障,成为越来越…...
js判断空对象
1. 使用 Object.keys() 方法 Object.keys(obj) 方法返回一个包含对象可枚举属性名称的数组。如果返回的数组长度为 0,表示对象为空。 const isEmpty (obj) > Object.keys(obj).length 0;// 示例 const emptyObject {}; const nonEmptyObject { key: value …...

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具
1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…...

PyCharm中Python项目打包并运行到服务器的简明指南
目录 一、准备工作 二、创建并设置Python项目 创建新项目 配置项目依赖 安装PyInstaller 三、打包项目 打包为可执行文件 另一种打包方式(使用setup.py) 四、配置服务器环境 五、上传可执行文件到服务器 六、在服务器上运行项目 配置SSH解释…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...