Neo4j Cypher WHERE子句详解 - 初学者指南
Neo4j Cypher WHERE子句详解 - 初学者指南
- 前言
- 1. WHERE子句基础
- 1.1 WHERE子句的本质
- 1.2 示例数据
- 2. 基本用法
- 2.1 节点属性过滤
- 2.2 关系属性过滤
- 3. 高级过滤技巧
- 3.1 字符串匹配
- 3.2 正则表达式
- 3.3 属性存在性检查
- 4. 列表和范围操作
- 4.1 IN操作符
- 4.2 范围查询
- 5. 空值处理
- 5.1 默认处理
- 6. 实用技巧
- 总结
前言
大家好!今天我要和大家分享Neo4j图数据库中Cypher查询语言的WHERE子句使用方法。作为一名Python程序员,如果你刚开始接触Neo4j,理解WHERE子句的使用是非常重要的。这篇文章会用通俗易懂的方式,告诉你在Neo4j中如何使用WHERE进行数据过滤。
1. WHERE子句基础
1.1 WHERE子句的本质
首先要明白,WHERE并不是一个独立的子句,而是MATCH、OPTIONAL MATCH和WITH等子句的一部分。它主要有两个用途:
- 在MATCH和OPTIONAL MATCH中:用于添加模式匹配的约束条件
- 在WITH中:用于过滤结果
1.2 示例数据
为了更好地理解,我们先创建一些示例数据:
CREATE
(andy:Swedish:Person {name: 'Andy', age: 36, belt: 'white'}),
(timothy:Person {name: 'Timothy', age: 25}),
(peter:Person {name: 'Peter', age: 35, email: 'peter_n@example.com'}),
(andy)-[:KNOWS {since: 2012}]->(timothy),
(andy)-[:KNOWS {since: 1999}]->(peter)
2. 基本用法
2.1 节点属性过滤
MATCH (n:Person)
WHERE n.age < 30
RETURN n.name, n.age
这个查询会返回所有年龄小于30岁的人。
2.2 关系属性过滤
MATCH (n:Person)-[k:KNOWS]->(f)
WHERE k.since < 2000
RETURN f.name, f.age, f.email
这个查询会返回所有建立关系时间早于2000年的好友关系。
3. 高级过滤技巧
3.1 字符串匹配
Cypher提供了三种字符串匹配方式:
- STARTS WITH:前缀匹配
- ENDS WITH:后缀匹配
- CONTAINS:包含匹配
// 前缀匹配
MATCH (n:Person)
WHERE n.name STARTS WITH 'Pet'
RETURN n.name, n.age// 后缀匹配
MATCH (n:Person)
WHERE n.name ENDS WITH 'ter'
RETURN n.name, n.age// 包含匹配
MATCH (n:Person)
WHERE n.name CONTAINS 'ete'
RETURN n.name, n.age
3.2 正则表达式
可以使用 =~ 操作符进行正则表达式匹配:
// 匹配以Tim开头的名字
MATCH (n:Person)
WHERE n.name =~ 'Tim.*'
RETURN n.name, n.age// 不区分大小写的匹配
MATCH (n:Person)
WHERE n.name =~ '(?i)AND.*'
RETURN n.name, n.age
3.3 属性存在性检查
MATCH (n:Person)
WHERE n.belt IS NOT NULL
RETURN n.name, n.belt
这个查询会返回所有有belt属性的人。
4. 列表和范围操作
4.1 IN操作符
MATCH (a:Person)
WHERE a.name IN ['Peter', 'Timothy']
RETURN a.name, n.age
这个查询会返回名字是Peter或Timothy的人。
4.2 范围查询
// 简单范围
MATCH (a:Person)
WHERE a.name >= 'Peter'
RETURN a.name, a.age// 复合范围
MATCH (a:Person)
WHERE a.name > 'Andy' AND a.name < 'Timothy'
RETURN a.name, a.age
5. 空值处理
5.1 默认处理
// 属性缺失时默认为false
MATCH (n:Person)
WHERE n.belt = 'white'
RETURN n.name, n.age, n.belt// 属性缺失时包含在结果中
MATCH (n:Person)
WHERE n.belt = 'white' OR n.belt IS NULL
RETURN n.name, n.age, n.belt
6. 实用技巧
- 在写复杂查询时,建议先用小数据集测试WHERE条件
- 注意WHERE子句的位置,它会影响查询性能
- 使用参数化查询来避免注入问题
- 合理使用索引来提升查询性能
总结
本文介绍了Neo4j Cypher中WHERE子句的主要用法,从基础的属性过滤到高级的字符串匹配和正则表达式。掌握这些知识点,可以帮助你更好地处理图数据库中的查询需求。
相关文章:
Neo4j Cypher WHERE子句详解 - 初学者指南
Neo4j Cypher WHERE子句详解 - 初学者指南 前言1. WHERE子句基础1.1 WHERE子句的本质1.2 示例数据 2. 基本用法2.1 节点属性过滤2.2 关系属性过滤 3. 高级过滤技巧3.1 字符串匹配3.2 正则表达式3.3 属性存在性检查 4. 列表和范围操作4.1 IN操作符4.2 范围查询 5. 空值处理5.1 默…...

【CSS】标准怪异盒模型
概念 CSS 盒模型本质上是一个盒子,盒子包裹着HTML 元素,盒子由四个属性组成,从内到外分别是:content 内容、padding 内填充、border 边框、外边距 margin 盒模型的分类 W3C 盒子模型(标准盒模型) IE 盒子模型(怪异盒模型) 两种…...

栈详解
目录 栈栈的概念及结构栈的实现数组栈的实现数组栈功能的实现栈的初始化void STInit(ST* pst)初始化情况一初始化情况二 代码栈的插入void STPush(ST* pst, STDataType x)代码 栈的删除void STPop(ST* pst)代码 栈获取数据STDataType STTop(ST* pst)代码 判断栈是否为空bool ST…...
硬盘 <-> CPU, CPU <-> GPU 数据传输速度
1. 硬盘 <-> CPU 数据传输速度 import time import os# 定义文件大小和测试文件路径 file_size 1 * 1024 * 1024 * 100 # 100 MB 的文件大小 file_path "test_file.bin"# 创建一个测试文件并测量写入速度 def test_write_speed():data os.urandom(file_si…...

数据编排与ETL有什么关系?
数据编排作为近期比较有热度的一个话题,讨论度比较高,同时数据编排的出现也暗示着数字化进程的自动化发展。在谈及数据编排时,通常也会谈到ETL,这两个东西有相似点也有不同点。 数据编排和ETL(提取、转换、加载&#x…...
来了解一下!!!——React
React 是一个用于构建用户界面的 JavaScript 库,特别适合用于创建单页面应用程序(SPA)。它由 Facebook 维护,并且拥有一个活跃的社区,这使得 React 成为了目前最流行的前端框架之一。以下是关于 React 的一些重要信息和…...

用vite创建项目
一. vite vue2 1. 全局安装 create-vite npm install -g create-vite 2. 创建项目 进入你想要创建项目的文件夹下 打开 CMD 用 JavaScript create-vite my-vue2-project --template vue 若用 TypeScript 则 create-vite my-vue2-project --template vue-ts 这里的 …...

json-server的使用(根据json数据一键生成接口)
一.使用目的 在前端开发初期,后端 API 可能还未完成,json-server 可以快速创建模拟的 RESTful API,帮助前端开发者进行开发和测试。 二.安装 npm install json-server //局部安装npm i json-server -g //全局安装 三.使用教程 1.准备一…...

半波正弦信号的FFT变换
目录 Hello, 大家好,这一期我们谈谈半波正弦信号的FFT变化长什么样子。本文硬件使用GFARM02硬件模块[1],文章最后有其淘宝链接。核心器件为STM32F103RCT6,为Cortex-M3核,采用的CMSIS版本为CMSIS_5-5.6.0。 如图1所示&…...

Python数据分析NumPy和pandas(二十三、数据清洗与预处理之五:pandas的分类类型数据)
pandas的分类类型数据(Categorical Data) 这次学习使用Categorical Data,在某些 pandas 操作中使用分类类型能实现更好的性能和减少内存使用。另外还学习一些工具,这些工具有助于在统计和机器学习应用程序中使用分类数据。 一.背…...
redis源码系列--(二)--multi/exec/eval命令执行流程
本文主要记录multi/exec、eval、redis执行lua脚本的源码流程 redis在exec之前,所有queued的命令是没有执行的,!!!在执行时会通过检测client是否被打上CLIENT_DIRTY_CAS标记来判断[watch后,exec时]时间段内是否有key被…...

【力扣打卡系列】移动零(双指针)
坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day19 移动零(双指针) 题目描述 解题思路 p和q同时从起点移动,p每次都,q仅在交换时,p遇到非零数时与p值交换!!…...
无源元器件-电容选型参数总结
🏡《总目录》 目录 1,概述2,电容选型参数2.1,电容值(Capacitance)2.2,额定电压(Rated Voltage )2.3,外观(Appearance)2.4,尺寸(Dimension)2.5,耐压(Voltage Proof)2.6,绝缘电阻(Insulation Resistance)2.7,耗散因子或耗散系数(IQ or Dissipation Facto…...
Linux下的socket编程
概述 下面是一个通用的server端程序源码,用于实现两个client之间的通信。 功能 1、接收user的命令cmd消息,并将cmd消息发送到dev; 2、接收dev的应答ack消息,并将ack消息发送到user; 架构实现 通过6个线程实现。 …...

【算法】Floyd多源最短路径算法
目录 一、概念 二、思路 三、代码 一、概念 在前面的学习中,我们已经接触了Dijkstra、Bellman-Ford等单源最短路径算法。但首先我们要知道何为单源最短路径,何为多源最短路径 单源最短路径:从图中选取一点,求这个点到图中其他…...

iOS SmartCodable 替换 HandyJSON 适配记录
前言 HandyJSON群里说建议不要再使用HandyJSON,我最终选择了SmartCodable 来替换,原因如下: 首先按照 SmartCodable 官方教程替换 大概要替换的内容如图: 详细的替换教程请前往:使用SmartCodable 平替 HandyJSON …...
使用 axios 拦截器实现请求和响应的统一处理(附常见面试题)
在现代前端开发中,我们经常需要向服务器发送 HTTP 请求,并根据响应内容做不同的处理。axios 是一个流行的 HTTP 库,提供了 拦截器 功能,可以在请求和响应阶段插入自定义逻辑,这使得我们在处理认证、错误提示等场景时更…...

阿里 Sentinel
1、什么是sentinel? sentinel顾名思义:卫兵;在Redis中叫做哨兵,用于监控主从切换,但是在微服务中叫做流量防卫兵。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定…...

【点云网络】 pointnet 和 pointnet++
这两个网络都是斯坦福大学的一个团队提出的 我先先看一下pointnet的网络架构,这个网络比较经典,是2016年提出的: PointNet 是一个专门用于点云数据处理的神经网络。它的设计目的是直接操作不规则的点云数据,而无需将点云数据转换为规则网格或…...
.net core mvc 控制器中页面跳转
方式一: 在控制器的方法内部结尾使用 return View(); 来打开与方法同名的页面,如: public ActionResult Login() { return View(); } 该写法打开 Login 页面。 方式二: 可以添加参数来显式地指定要跳转的页面࿰…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...