我们知道cypher语句中可以使用 IN [1,2,3] 来达到过滤集合数据的功能,那怎么实现NOT IN 呢?
经过研究cypher函数,我找到了方法。就是使用none()函数函数,这个函数的意思是没有一个元素满足条件。
用这个函数就可以写出NOT IN 效果。例如,排除关系ID不在一个集合里的数据,就可以写出如下语句
match (c:Company)-[r*..2]-(d) where id(c)=0 and id(d) <> 0
and none(x in r where id(x) in [78,79])
return d,r,order by size(r)
语句中的none(x in r where id(x) in [78,79]) 就是排除关系ID是78和79的数据,其他属性字段可以同理操作。
这里来复习下cypher的函数
参考资料:https://www.cnblogs.com/ljhdo/p/10919763.html
一,谓词函数
谓词函数返回true或者false,主要用于检查是否存在或满足特定的条件。
1,Exists
如果指定的模式存在于图中,或者特定的属性存在于节点、关系或Map中,那么函数返回True
例如,节点具有name属性,并check图中是否存在特定的模式:
MATCH (n)
WHERE exists(n.name)
RETURN n.name AS name, exists((n)-[:MARRIED]->()) AS is_married
2,检查集合元素
all()表示所有的元素都满足条件,any()表示至少一个元素满足条件,none()函数表示没有一个元素满足条件,single()表示只有一个元素满足条件
例如,ALL谓词表示,在路径中,所有节点都必须具有age属性&