Neo4j学习之路02——Cypher语法

MERGE:合并节点,若没有匹配到查询的模式就创建它

1.1:合并节点:

MERGE创建节点使用唯一性约束,使节点属性不发生重名的情况
MERGE = CREATE + MATCH

// 合并有多个属性的节点,若不存在则创建
MERGE (charlie {name:'Charlie Sheen', age:10}) RETURN charlie

1.2:MERGE与MATCH与CREATE搭配:

// 查询找到带有Person节点然后设置它们的found属性为TRUE
MERGE (person:Person)
ON MATCH SET person.found=TRUE
RETURN person.name, person.found

// 结合CREATE与MATCH,MEAGE先检查节点是否存在,不存在则创建,后设置属性
MERGE (keanu:Person{name:'Keanu Reeves'})
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, keanu.created, keanu.lastSeen

1.3:MEAGE匹配节点时可以不指定方向,MEAGE会为我们自定义方向

// 匹配具有KNOWS关系之间的两个节点
MATCH (charlie:Person{name:'Charlie Sheen'}), (oliver:Person{name:'Lilly'})
MEAGE (charlie)-[r:KNOWS]-(oliver)
RETURN charlie,r

CREATE UNIQUE:创建唯一性节点

// 节点关系中不存在LOVES,会创建唯一节点与root关联
MATCH (root{name:'root'})
CREATE UNIQUE (root)-[:LOVES]-(someone)
RETURN someone

// 当A节点已近与B节点有该关系,当前匹配会创建A指向C的唯一关系
MATCH (lft{name:'A'}),(rgt)
WHERE lft.name IN ['B','C']
CREATE UNIQUE (lft)-[r:KNOWS]->(rgt)
RETURN lft,rgt

// 含值模式创建
MATCH (root{name:'A'})
CREATE UNIQUE (root)-[:X]-(leaf{name:'D'})
RETURN leaf

SET:用于更新节点的标签以及节点与关系的属性

// 修改属性将属性值置空
MATCH (n:Person{name:'Tom'})
SET n.name = NULL
RETURN n

// 在节点与关系间拷贝属性
MATCH (at{name:'Andres'}),(pn{name:'Peter'})
SET at = pn
RETURN at, pn

// 添加属性
MATCH (peter{name:'Peter'}) 
SET peter += {hungry:TURE, position: 'East'}

// 添加标签
MATCH (n{name:'Stefan'})
SET n:German:Person
RETURN n

DELETE:删除节点与关系,路径等

删除前需要将带删除的元素或关系查询出来

// 删除关系
CREATE (n{name:'nodeA'})-[r:x]->(m{name:'nodeB'})
DELETE r

// 删除路径,注意这里删除路径与删除关系的区别
CREATE (n{name:'nodeA'})-[r:x]->(m{name:'nodeB'})
MATCH p=(a{name:'nodeA'})--(b{name:'nodeB'})
DELETE p

当删除一个带有关系的节点时,不能够直接删除,用DETACH DELETE

MATCH (n{name:'NodeA'})
DELETE DETACH n
// 删除属性
MATCH(n{name:'Tom'})
DELETE n.bronIn

// 删除标签
MATCH(n{name:'Tom'})
DELETE n:German

ORDER BY:排序,需要紧跟RETURN或者WITH语句使用

当结果集中的值含有null时,对于升序排列,null总是在结果集的末尾,而对于降序排列,null值总是会排在最前面

// 查找节点并按照名称降序排序
MATCH (n)
RETURN n
ORDER BY n.name DESC

LIMIT:限制结果集返回的模式

// 限制输出为五行
MATCH (n:Person)
RETURN n
ORDER BY n.num
LIMIT 5

SKIP:定义了从哪行开始返回,接受任意结果为整数的表达式

// 从第三页开始返回,每页返回10条
MATCH(n)
RETURN n
ORDER BY n.name
SKIP 3 LIMIT 10

WITH:

// 用匹配出的结果进行过滤
MATCH (david{name:'Tom Hanks'})--()--(otherPerson)
WITH otherPerson, count(*) AS foaf
WHERE foaf > 1
RETURN otherPerson

// 对匹配到的结果二次操作,用多条MATCH语句拼接查询
MATCH (n{name:'Tom Hanks'})--(m)
WITH m
ORDER BY m.name DESC LIMIT 1
MATCH (m)--(o)
RETURN o.name

FOREACH:用于循环遍历结果集列表

可以用FOREACH来更新列表与路径上的数据,FOREACH括号中的变量是与括号外部分离的,并且在FOREACH中可以对匹配到的元素执行CREATE,SET等操作。

// 遍历列表内的名字,创建用户与它们之间的朋友关系
MATCH (a{name:'root'})
FOREACH (name IN ['Mike', 'Carl', 'Bruce'] | CREATE (a)-[:FRIEND]->(:Person{name: name}))

聚类函数:

count:统计数量的函数

// 统计与Tom Hanks相关的关系以及关系数量
MATCH (n:Person{name:'Tom Hanks'})-[r]-(m)
RETURN type(r), count(*)

sum:和函数

MATCH (n:Person) RETURN sum(n.property)

avg:平均值函数

MATCH (n:Person) RETURN avg(n.property)

max,min:最大值与最小值

collect:收集匹配到的所有值,将它们放到一个list列表中

MATCH (n:Person)
RETURN collect(n.property)

DISTINCT:去除重复值的修饰符,所有的聚合函数都可以用这个关键字修饰,null会被忽略

MATCH (n) RETURN count(DISTINCT b.propertry)

 

UNWIND:将一个列表展开为一个行的序列

// 创建一个带有重复元素的行list,将它们转化为不重复的列元素集合
WITH [1,2,1,2] AS coll
UNWIND coll AS x
WITH DISTINCT x
RETURN collect(x) AS SET

 

UNION:联合

// 将两个查询的结果组合在一起,当不使用ALL时,则不会返回重复元素
MATCH (n:lable1)
RETURN n.name AS name
UNION ALL
MATCH (n.lable2)
RETURN n.title AS name

CALL:调用存储过程

// 调用过程,neo4j有很多内置过程,该语句返回label的数量与名称
CALL db.labels() YIELD label
RETURN count(label) AS numlabels,label

LOAD CSV:

  • CSV文件的URL可以由FROM后面紧跟的任意表达式来指定
  • 需要使用AS来为CSV数据指定一个变量
  • CSV可以通过HTTP,HTTPS等网络协议来访问服务器上的资源
// 从本地文件中导入数据
LOAD CSV FROM 'file:///artists.csv' AS line
CREATE(:Artist{name:line[1], year:toInt(line[2])})

// 从服务器上导入数据
LOAD CSV FROM 'http://xxxxxxx/xx.csv' AS line
CREATE(:Artist{name:line[1], year:toInt(line[2])})

// 当CSV包含头文件,开始行包含列的名称,指定WITH HEADERS可以通过对应的列名来访问指定的字段
LOAD CSV WITH HEADERS FROM
'http://xxxxxxx/xx.csv' AS line
CREATE (:Artist{name:line.Name, year:toInt(line.Year)})

// 导入巨量数据,在COMMIT后加数字可以指定一次性写入多少数据,不写默认一次性写入1000条
USING PERIODIC COMMIT 500
LOAD CSV FROM 'http://xxxxxxx/xx.csv' AS line
CREATE(:Artist{name:line[1], year:toInt(line[2])})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值