一般的增删改查操作,我们就不谈了。基本的操作网上都能查到,这篇文章就把我们经常会用到的写下来,供大家参考。话不多说直接开干。
– 删除关系 –
1、 (a)-[r]->(b) 要删除关系r,那我们直接这样写
match (a:ProductEntry)-\[r\]->(b:ProductEntry)
where id(a)='' and id(b)=''
delete r
2、(a)-[r]->b-[r]->© 要删除a,b,c之间的r关系,这个怎么写呢?你可能会这么写
match (a:ProductEntry)-\[r\*1..\]->(b:ProductEntry)
where id(a)='' and id(b)=''
delete r
我们可能想当然了,这样写其实会报错的。他会告诉你r是一个List不允许这么干。这个时候我们就用到了Cypher的一个foreach()函数,我们可以这么写
match p=(a:ProductEntry)-\[r\*1..\]->(b:ProductEntry)
where id(a)='' and id(b)=''
foreach(n in relationships(p)|delete n)
这里foreach意思就是循环查询出关系类型,然后删除。
语法:foreach(variable IN list | expression)
-
list:返回列表中的表达式
-
variable:引用list中元素的变量,他在expression中会用到
-
expression:针对列表中每个元素所运行的表达式,并产生一个结果列表
relationships()也是其中一个函数,表示返回一条路径中的所有关系,同理我们如果想获取路径中的所有节点这可以用nodes()函数。
*1…是描述关系长度大于等于1的路径,类似的还有
(a)-\[\*3..5\]->(b)
关系的长度最小值为3,最大值为5。他描述了一个或者有4个节点和3个节点关系,
或者5个节点4个关系,或者6个节点和5个关系连在一起的图组成的一条路径。
(a)-\[\*3..\]->(b)
一个路径长度大于等于3的路径
(a)-\[\*..5\]->(b)
一个路径长度小于等于5的路径
(a)-\[\*\]->(b)
任意长度的路径
我们的关系类型也可以写多个用“|”隔开,比如
(a)-[:KNOW_S|TYPE2*1..2]->(b)
– 删除节点 –
1、删除节点(a)-[r]->(b)中的a节点,我们直接这么写
match (a)-\[r\]->(b)
delete a
这样也会报错的,因为(a)节点存在关系®连接着,如果要删除节点,要先删除关系®,当然我们也可以这么写,他会把关联(a)以及他的关系都删掉
match (a)-\[r\]->(b)
detach delete a
– 断言函数 –
Cypher的断言函数:
-
all():判断是否一个断言适用于列表中的所有元素
-
any():判断是否一个断言至少适用于列表中的一个元素
-
none():如果断言不适用于列表中的任何元素,则返回true
-
single():如果断言刚好只适用于列表中的某一个元素,则返回true
-
exists():如果数据库中存在该模式或者节点中存在该属性时,则返回true
这里我们只讲一个all()函数,其他的语法都类似。
(a)-[r]-(b),查询长度为1到3中所有节点都有一个大于30的age属性,那我们查询语句是这样的
match p=(a)-\[r\*1..3\]->(b)
where a.name='' and b.name=''
and all(x in nodes(p) where x.age>30)
return p
语法:all(variable IN list where predicate)
-
list:返回列表的表达式
-
variable:用于断言中的变量
-
predicate:用于测试列表中所有元素的断言
今天语法就讲到这里了,后续我们还会接着讲。
有疑问请点赞和留言哈,我会及时回复。
- 本期完 -
为方便看最新内容,记得关注哦!