Cyper 笔记

添加

// 创建节点
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
原文地址:https://www.cnblogs.com/twilight0402/p/13509130.html