Cypher 笔记
添加
// 创建节点
CREATE (n:MOVIE{name:"电影"})
// 创建节点
create (n:Test)
set n.name="Test"
// 创建关系
MATCH (cust:Customer),(cc:CreditCard)
WHERE cust.id = "1001" AND cc.id= "5001"
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
删除
// 删除节点
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
// 批量删除label的属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book
// 删除单个节点的属性
match (n:Book{title:"kg"}) remove n.pages
// 删除多个属性
match (n:Book{title:"Neo4j Tutorial2"}) remove n.pages, n.price
更新
// 增加/更新 某个节点的属性值
MATCH (n:Book{title:"kg"}) set n.test2="test" return n
// 批量增加属性
MATCH (dc:Book)
SET dc.testss = 3456
排序
// 排序
MATCH (dc:Book)
return dc
order by dc.id desc
UNION
// UNION ALL 返回包含重复结果的行
// UNION 返回公共结果,不返回重复的行
// 类名和数据类型要相同,(只需要as后的列名相同)
match (n:Movie) where n.id<=2 return n.id as id, n.price as price
union
match(m:Movie) where m.id>2 return m.id as price, m.price as id
MERGE
// create 会创建重复的行(如果记录存在,就创建一个同样的节点)
// merge 不会添加重复的行(如果记录已存在就不添加)
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})
UNWIND
// 遍历列表
unwind [1,2,3,4] as b
return b
// 使用with
with [1,2,3,4] as a
unwind a as b
return b
// 去重后输出
with [1,2,3,3,3] as list
unwind list as item
with distinct item
return item
// 遍历列表
with [1,2] as a , [3,4] as b
unwind (a + b) as c
return c
// 遍历列表(只能解包一层)
with [1,2,[7,8]] as a, [3,4] as b
unwind (a + b) as c
return c
// 解两层
with [1,2,[3,4]] as nest
unwind nest as hidden
unwind hidden as out
return out
SKIP && LIMIT
// limit 限制取的结果条数
match (n:Book)
return n.id
limit 2
// 跳过第一个结果
match (n:Book)
return n.id
skip 1
// 跳过第一个,从第二个开始取两条
match (n:Book)
return n.id
skip 1
limit 2
NULL
// 创建一个属性全为null的节点
create (n:Movie)
// 判断是否为NULL
match (n:Movie)
where n.price is not null
return n.name
// 判断是否为NULL
match (n:Movie)
where n.price is null
return n.name
// 用IN来判断是否包含
match (n:Movie)
where n.name in ["电影1", '电影2']
return n.name
CASE
一种跟在return语句之后的关键字。可以对返回的数据进行判断。比如空值怎么处理
- 格式1:
CASE var_name
WHEN var_value THEN result
[WHEN var_value2 THEN result2]
[ELSE default_result]
END
match (n:VENUE)
return CASE n.VENUE_TYPE
WHEN "" THEN "其他"
WHEN NULL THEN "NULL"
ELSE n.VENUE_TYPE END AS VENUE_TYPE, count(n) as COUNT
- 格式2:
CASE
WHEN predicate THEN result
[WHEN predicate THEN result]
[ELSE default]
END
[AS NEW_NAME]
match (n:VENUE)
return CASE
WHEN n.VENUE_TYPE="" OR n.VENUE_TYPE="" IS NULL THEN "其他"
ELSE n.VENUE_TYPE END AS VENUE_TYPE, count(n) as COUNT
关系
关系必须有方向,关系可以反着写
// 创建关系(正向)
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)-[r:R{name:"关系"}]->(n)
// 创建关系(反向)
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)<-[r:R{name:"关系2"}]-(n)
// 同时指定两个方向会报错
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)<-[r:R{name:"关系2"}]->(n)
// 没有指定方向也会报错
match (m:Movie), (n:Movie)
where m.name="电影111" and n.name="电影2"
create (m)-[r:R{name:"关系2"}]-(n)
// 查询关系(返回关系不会显示在可视化中)
match (m:Movie)-[r:R]->(n:Movie)
where m.name="电影111" and n.name="电影2"
return r
// 查询关系可以反向(n->m 的关系)
match (m:Movie)<-[r:R]-(n:Movie)
where m.name="电影111" and n.name="电影2"
return r
// 查询关系也可以不写方向(会查到两个方向的关系)
match (m:Movie)-[r:R]-(n:Movie)
where m.name="电影111" and n.name="电影2"
return r
// 多跳的关系
match p=(m:Movie{name:"电影2"})-[r]-(n:Movie{name:"电影111"})-[r2]-(t:Movie{name:"电影5"})
return p
控制路径长度
// 展开4次,显示路径长度<=4的所有节点和路径。每次都展开相连的所有节点,下一次再继续展开外层的节点
match p=(n:VENUE{OBJ_NAME:"AAA"})-[r*4]-() return p
// 只显示路径长度在[2,3]范围内的路径,太短的路径不会显示(比如长度为1的路径)
match p=(n:FJS{STATION_NAME:"AAA"})-[r*2..3]-() return p
// [1, 2]范围内的路径
match p=(n:FJS{STATION_NAME:"AAA"})-[r*..2]-(m) return p
// 指定长度的路径
match p=(n:FJS{STATION_NAME:"AAA"})-[r2..2]-(m) return p
// 关系可以加上逻辑或操作(|)
match p=(m:SUBSTATION{STATION_NAME:"AAA"})-[r:END_STATION|:PARTNER|:ORIGIN_LINE*2..2]-(n)
return p
分组
match (n:SUBSTATION) where n.SUPPLY_TYPE is not NULL
RETURN n.SUPPLY_TYPE, COUNT(n)
字符串函数
功能 | 描述 |
---|---|
UPPER | 它用于将所有字母更改为大写字母 |
LOWER | 它用于将所有字母改为小写字母 |
SUBSTRING | 它用于获取给定String的子字符串SUBSTRING(str,start,end) , 截取的范围是[start, end) |
REPLACE | 它用于替换一个字符串的子字符串 |
match (n:Movie)
where n.name="AAAbbb"
return UPPER(n.name), upper(n.name), lower(n.name),substring(n.name, 0, 3)
// 替换子串(不会改变原字符串)
match (n:Movie)
where n.name="AAAbbb"
return replace(n.name, "AAA", "CCC")
聚合函数
聚集功能 | 描述 |
---|---|
COUNT | 它返回由MATCH命令返回的行数 |
MAX | 它从MATCH命令返回的一组行返回最大值 |
MIN | 它返回由MATCH命令返回的一组行的最小值 |
SUM | 它返回由MATCH命令返回的所有行的求和值 |
AVG | 它返回由MATCH命令返回的所有行的平均值 |
match (n:Movie)
return max(n.id), min(n.id), avg(n.id), count(n.id)
关系函数
功能 | 描述 |
---|---|
STARTNODE | 它用于知道关系的开始节点 |
ENDNODE | 它用于知道关系的结束节点 |
ID | 它用于知道关系的ID |
TYPE | 它用于知道字符串表示中的一个关系的TYPE |
// 这两个id并不相同,id(n)是系统自动加上的id,n.id是用户加上的id属性。
match (n:Movie)
return id(n), n.id
// 返回关系的类型,不能返回node的类型(会报错)
match (n:Movie)-[r]->(m:Movie)
where n.name="电影111" and m.name="电影2"
return TYPE(r)
match (n:Movie)-[r]->(m:Movie)
where n.name="电影111" and m.name="电影2"
return startnode(r), endnode(r)
索引
CREATE INDEX ON :<label_name> (<property_name>)
// 新建索引
CREATE INDEX ON :Customer (name)
DROP INDEX ON :<label_name> (<property_name>)
// 删除索引
DROP INDEX ON :Customer (name)
UNIQUE约束
CREATE CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
// 创建索引,如果已有的数据有重复的,那么建立索引会失败。
create constraint on (m:Movie)
assert m.name is unique
DROP CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
// 删除索引
drop constraint on (m:Movie)
assert m.name is unique
Cypher 笔记的更多相关文章
- Neo4j/cypher学习笔记与学习建议
简介 本笔记的主要内容是 cypher 查询语言的编写与使用. 笔记主要整理自w3cschool上的neo4j教程以及Neo4j中文网所提供的cypher中文文档,此外还包括少量从其他个人博客与官方手 ...
- Neo4j数据和Cypher查询语法笔记
Cypher数据结构 Cypher的数据结构: 属性类型, 复合类型和结构类型 属性类型 属性类型 Integer Float String: 'Hello', "World" B ...
- 人工智能头条(公开课笔记)+AI科技大本营——一拨微信公众号文章
不错的 Tutorial: 从零到一学习计算机视觉:朋友圈爆款背后的计算机视觉技术与应用 | 公开课笔记 分享人 | 叶聪(腾讯云 AI 和大数据中心高级研发工程师) 整 理 | Leo 出 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
随机推荐
- 如何自定义一个Collector
Collectors类提供了很多方便的方法,假如现有的实现不能满足需求,我们如何自定义一个Collector呢? Collector接口提供了一个of方法,调用该方法就可以实现定制Collecto ...
- Excelize 2.5.0 正式发布,这些新增功能值得关注
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
- 【java】学习路线6-静态方法、私有化方法、父类子类
import java.util.Arrays; /* 我们可以自己创建方法(静态) 私有化方法,阻止他人实例化该方法 静态代码块只执行一次,只在加载这个所在类的时候执行 父类 - 子类 子类继承自父 ...
- Java循环解析
Java循环解析 while循环(先判断) int i=0; while (i<100){ i++; System.out.println(i); } DoWhile循环(先执行,后 ...
- openstack中Cinder组件简解
一,Cinder组件介绍 概念 cinder组件作用: 块存储服务,为运行实例提供稳定的数据块存储服务 块存储服务,提供对 volume 从创建到删除整个生命周期的管理 二,常用操作 1.Volume ...
- KubeOperator界面,集群详情中的存储,存储提供商
点击"添加",假设选择的类型是rook-ceph,表示的是在这个k8s集群里创建rook-ceph集群,而不是显示已经存在的集群 意味着可以使用这种办法在k8s集群里创建rook- ...
- Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 三)
- ES小知识点
elasticsearch.yml配置文件 network.host: _site_ # network.host设置为"_site_",表明它绑定到我们的本地电脑的IP地址 di ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第二篇:canal 实现Mysql到Elasticsearch实时增量同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484377&idx=1&sn=199bc88 ...
- Prometheus中使用的告警规则
参考网站:https://awesome-prometheus-alerts.grep.to/rules 这个网站上有好多常用软件的告警规则,但是有些并不一定实用,有些使用起来会有错误,这里就把这些都 ...