CQL 函数及多深度关系节点

1. CQL 函数

数据准备

// 删除所有的节点和关系 
 MATCH(n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
 
// 创建Person 的节点 
CREATE (person:Person {cid:1,name:"范闲",age:24,gender:0,character:"A",money:1000,description:"范闲,是猫腻小说《庆余年》主人公,穿越人士,庆国数十年风雨画卷的见证者。其容貌俊美无双,尤胜于女子,生性淡薄刚毅,善良而腹黑,城府极深,重视恩情。最终隐居江南"});
CREATE (person:Person {cid:2,name:"林婉儿",age:20,gender:1,character:"B",money:800,description:"林婉儿是庆国宰相和长公主的私生女,电视剧《庆余年》里的女主人公,由李沁饰演"});
CREATE (person:Person {cid:3,name:"庆帝",age:49,gender:0,character:"A",money:8900,description:"庆帝,网文作家猫腻所著的权谋小说《庆余年》的角色之一,南庆国的皇帝,心中装有天下统一"});
CREATE (person:Person {cid:4,name:"长公主",age:46,gender:1,character:"B",money:3700,description:"《庆余年》中,长公主这个人不仅人设很复杂,就连她的感情生活还是挺复杂。长公主所处的身份就是庆国的公主,皇帝的妹妹,太子的姑姑,国家重要财权的掌管,林婉儿的母亲"});
CREATE (person:Person {cid:5,name:"宰相林若甫",age:47,gender:0,character:"A",money:1600,description:"林若甫,是电视剧《庆余年》登场的虚拟人物之一,南庆当朝宰相,林婉儿的亲生父亲。"});
CREATE (person:Person {cid:6,name:"叶灵儿",age:20,gender:1,character:"C",money:700,description:"叶灵儿,网文作家猫腻所著的权谋小说《庆余年》的角色之一,林婉儿的好友,最后嫁给了二皇子"});
CREATE (person:Person {cid:7,name:"九品射手燕小乙",age:47,gender:0,character:"C",money:900,description:"一品最低,九品最高。庆帝身边的燕小乙便是九品,而且是庆国独一无二的神射手,臂力、眼力、听力惊人"});
CREATE (person:Person {cid:8,name:"二皇子",age:26,gender:0,character:"B",money:1700,description:"《庆余年》中,二皇子结局自杀身亡。二皇子对庆帝也是意见很大,但以他的实力还掀不起什么水花,所以只能慢慢等待时机"});
CREATE (person:Person {cid:9,name:"靖王世子",age:25,gender:0,character:"A",money:1600,description:"在《庆余年》中,此靖王非彼靖王,但是同音之美也会让人会对靖王世子李弘成这个角色产生好感,而靖王世子李弘成的出场的确是帮助了范闲逃脱太子势力的纠缠"});
CREATE (person:Person {cid:10,name:"王启年",age:46,gender:0,character:"C",money:1700,description:"王启年,网文作家猫腻所著的权谋小说《庆余年》的角色之一,庆国监察院一处的文书,擅长追踪之术。"});
CREATE (person:Person {cid:11,name:"北齐圣女海棠朵朵",age:21,gender:1,character:"A",money:2600,description:"海棠朵朵是北齐国的才女,被人尊称为圣女,而且是北齐大宗师苦荷的关门弟子,在北齐国也算是举足轻重的人物"});
CREATE (person:Person {cid:12,name:"北齐小皇帝战豆豆",age:20,gender:0,character:"A",money:4600,description:"很多人想知道剧中的北齐小皇帝是谁呢?让小编告诉你们吧。 战豆豆是北齐第二任皇帝,乃前北魏一代大将战清风之孙,大宗师苦荷的叔侄女兼徒孙"});

//创建关系 
match(person:Person {name:"范闲"}),(person2:Person {name:"林婉儿"}) create(person)-[r:Couple]->(person2);
match(person:Person {name:"范闲"}),(person2:Person {name:"王启年"}) create(person)-[r:Friends]->(person2);
match(person:Person {name:"范闲"}),(person2:Person {name:"北齐圣女海棠朵朵"}) create(person)-[r:Friends]->(person2);
match(person:Person {name:"范闲"}),(person2:Person {name:"庆帝"}) create(person)-[r:Father]->(person2);
match(person:Person {name:"范闲"}),(person2:Person {name:"长公主"}) create(person)-[r:Wife_Mother]->(person2);
match(person:Person {name:"庆帝"}),(person2:Person {name:"二皇子"}) create(person)-[r:Son]->(person2);
match(person:Person {name:"庆帝"}),(person2:Person {name:"长公主"}) create(person)-[r:BrotherSister]->(person2);
match(person:Person {name:"二皇子"}),(person2:Person {name:"靖王世子"}) create(person)-[r:Friends]->(person2);
match(person:Person {name:"北齐圣女海棠朵朵"}),(person2:Person {name:"北齐小皇帝战豆豆"}) create(person)-[r:Friends]->(person2);
match(person:Person {name:"林婉儿"}),(person2:Person {name:"叶灵儿"}) create(person)-[r:Friends]->(person2);
match(person:Person {name:"林婉儿"}),(person2:Person {name:"宰相林若甫"}) create(person)-[r:Father]->(person2);
match(person:Person {name:"林婉儿"}),(person2:Person {name:"长公主"}) create(person)-[r:Mother]->(person2);
match(person:Person {name:"长公主"}),(person2:Person {name:"九品射手燕小乙"}) create(person)-[r:Friends]->(person2);

1.1 字符串函数

序号功能描述
1TOUPPER它用于将所有字母更改为大写字母。
2TOLOWER它用于将所有字母改为小写字母。
3SUBSTRING它用于获取给定String的子字符串。左闭右开
4REPLACE它用于替换一个字符串的子字符串。
match (p:person) return p.cid,p.character,tolower(p.character),p.name,substring(p.name,0,1),replace(p.name,"子","zi")

1.2 聚合函数

序号聚集功能描述
1COUNT它返回由MATCH命令返回的行数。
2MAX它从MATCH命令返回的一组行返回最大值。
3MIN它返回由MATCH命令返回的一组行的最小值。
4SUM它返回由MATCH命令返回的所有行的求和值。
5AVG它返回由MATCH命令返回的所有行的平均值。
match(p:person) return count(p),avg(p.money),sum(p.money),max(p.money),min(p.money)

1.3 关系函数

序号功能描述
1STARTNODE它用于知道关系的开始节点。
2ENDNODE它用于知道关系的结束节点。
3ID它用于知道关系的ID。
4TYPE它用于知道字符串表示中的一个关系的TYPE。

聚合函数遇到空值不做处理

match(p:person{name:"林婉儿"}) - [r:Couple] - (p:person) return startnode(r),ID(r),TYPE(r)

1.4 shortestPath 函数返回最短的 path

MATCH p=shortestPath( (node1)-[*]-(node2) ) RETURN length(p), nodes(p)
match p = shortestpath((p1:Person{name:"王启年"}) - [*] - (p2:Person{name:"九品射手燕小乙"}))  return length(p),nodes(p)

match p = shortestpath((p1:Person{name:"王启年"}) - [*1..3] - (p2:Person{name:"九品射手燕小乙"})) return length(p),nodes(p)

2. CQL 多深度关系节点

2.1 使用with关键字

查询三层级关系节点如下:with 可以将前面查询结果作为后面查询条件

match(na:Person) - [ra] -> (nb:Person) where na.name = "范闲" with na,nb,ra  match(nb:Person) - [rb] -> (nc:Person) return na,nb,nc,ra,rb

match(na:Person) - [ra] -> (nb:Person) where na.name = "林婉儿" with na,nb,ra match(nb:Person) - [rb] -> (nc:Person) return na,nb,nc,ra,rb

match(na:Person) - [ra] - (nb:Person) where na.name = "林婉儿" with na,nb,ra match(nb:Person) - [rb] -> (nc:Person) return na,nb,nc,ra,rb

match(na:Person) - [ra] - (nb:Person) where na.name = "林婉儿" with na,nb,ra match(nb:Person) - [rb:Friends] -> (nc:Person) return na,nb,nc,ra,rb

2.2 直接拼接关系节点查询

match(na:Person{name:"范闲"}) - [ra] -> (nb:Person) - [rb] -> (nc:Person) return na,nb,nc,ra,rb

为了方便,可以将查询结果赋给变量,然后返回

match data = (na:Person{name:"范闲"}) - [ra] -> (nb:Person) - [rb] -> (nc:Person) return data

2.3 使用深度运算符

当实现多深度关系节点查询时,显然使用以上方式比较繁琐。
可变数量的关系 -> 节点可以使用 -[:TYPE*minHops..maxHops]-
查询:

match data = (na:Person{name:"范闲"}) - [*1..2] -> (nb:Person) return data

match data = (na:Person{name:"范闲"}) - [:Friends*1..2] -> (nb:Person) return data

Neo4j入门和基本操作教程地址:https://mall.csdn.net/item/85530

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小松の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值