
Neo4j系列导航:
neo4j及简单实践
cypher语法基础
cypher插入语法
cypher插入语法
cypher查询语法
cypher通用语法
cypher函数语法
neo4j索引及调优
2.查询语法
match、optional match、where、start和aggregation(聚合)
2.1.match语法
查询已有数据
-
简单查询
查询所有节点:
match (n) return n
查询指定标签的节点:
match (n:Person) return n
查询指定标签和属性的节点:
match (n:Person {name:"zhangsan"}) return n -
关系查询
查询出度1节点:
match (n:Person{name:"zhangsan"})-[r]->(m) return m
match (n:Person{name:"zhangsan"})-->(m) return m查询入度2节点:
match (n:Person{name:"zhangsan"})<-[r]-(m) return m
match (n:Person{name:"zhangsan"})<--(m) return m查询关联3节点:
match (n:Person{name:"zhangsan"})-[r]-(m) return m
match (n:Person{name:"zhangsan"})--(m) return m查询关联节点(带标签):
match (n:Person{name:"zhangsan"})-[r]-(m:Person) return m
match (n:Person{name:"zhangsan"})--(m:Person) return m通过关系类型查询:
match (n:Person{name:"zhangsan"})-[r:Friend]->(m) return r
多个关系类型查询:
match (n:Person{name:"zhangsan"})-[r:Friend|:Schoolmatet]->(m) return r
多重关系查询:
match (n{name:"zhangsan"})-[:Friend]->(m)<-[:Schoolmatet]-(d) return m,d -
层级查询-直接拼接关系多层查询:
match (n:Person{name:"zhangsan"})-[r]->(m)-[k]->(v) return n,r,m,k,v -
层级查询-深度运算符:[:TYPE*min…max]4
- min和max,默认值分别为1和无穷大,为0时表示节点本身
- 当没有边界值的时候,点也可以省略
- 当只设置了一个边界的时候,如果点省略了就意味着是一个固定长度的模式.
固定深度查询: 查询当前节点关系2度的出度节点
match (n:Person{name:"zhangsan"})-[*2]->(m) return m查询当前节点1度到三度的所有出度节点:
match (n:Person{name:"zhangsan"})-[r*1..3]->(result)查询包括n节点的所有出度节点:
match (n:Person{name:"zhangsan"})-[r*0..]->(result)查询不包括n节点的所有出度节点:
match (n:Person{name:"zhangsan"})-[r*1..]->(result)查询不包括n节点,关系为Friend且出度节点为Person的所有节点:
match (n:Person{name:"zhangsan"})-[r:Friedn*1..]->(m:Person) return m -
路径查询:
命名路径:
match p=(n:Person{name:"zhangsan"})-->() return p匹配一簇关系: 当模式包含一簇关系时,关系模式不会指定方向,Cypher将尝试匹配两个方向的关系
查询返回两个相连的节点,一个为开始节点,一个为结束节点match (a)-[r]-(b) where id(r)=30 return a,b查询具有一定深度的节点:
match p=()-[*2..4]-()return p最短路径: shortestPath函数,获取节点之间的最短路径
match (n:Person{name:"zhangsan"}),(m:Person{name:"zhaoliu"}), p=shortestPath((n)-[*..15]-(m)) return pmatch (n:Person{name:"zhangsan"}),(m:Person{name:"zhaoliu"}), p=shortestPath((n)-[*]-(m)) where none (r in relationships(p) where type(r)= "Friend") return p所有最短路径: allShortestPaths函数,获取所有最短路径
match (n:Person{name:"zhangsan"}),(m:Person{name:"zhaoliu"}), p=allShortestPaths((n)-[*]-(m)) return p
2.2.optional match语法
与match类似,只是如果没有匹配上,则将使用null作为没有匹配上的模式。类似于SQL中的外连接。
-
匹配,如果没有返回null:
match (a:Person{name:"zhangsan") optional match (a)-->(x) return x
2.3.where语法
条件过滤语句,与关系型数据库中的where用法类似。一般与match、option match和with等关键字结合使用用于给模式添加约束或者过滤传递给WITH的中间结果。
-
标签过滤:
match(n) where n:Person return n -
过滤属性:
match(n) where n.name="zhangsan" and n.age<30 return n -
过滤存在某属性的节点:
match(n) where exists(n.age) return n -
正则匹配:
match(n) where n.name=~"zhang.*" return n7 -
where中使用模式:
where中带模式:
match (n{name:"zhangsan"}),(m) where m.name in ['wangwu', 'zhaoliu'] and (n)-->(m) return m过滤关系带属性:
match (n) where (n)-[:Friend]-({name:'lisi'}) return n过滤关系类型:
match (n)-[r]->(m) where n.name='zhangsan' and type(r)=~"F.*" return r使用not:
match (n),(m{name:"lisi"}) where not (n)-->(m) return n
寻找出度节点name不是lisi的节点使用in
match (n) where n.name in ["zhangsan", "lisi"] return n过滤null:
match (n) where n.name="zhangsan" and n.address is not null RETURN person
2.4.start语句
start语句仅用于访问neo4j遗留的索引(节点或者关系的索引)
-
访问节点:
start n=node(1) return n -
**通过索引获取节点:语法
node:index-name("query")start n=node:nodes("name:A") return n’ -
通过索引获取关系: 语法
relationship:index-name(key="value")start=relationship:rels(name = "zhangsan") returnrels为关系索引的名称
2.5.aggregation(聚合)函数
-
count: 统计次数
match (n:Person{name:"zhangsan"})-->(x) return n, count(x) -
sum: 统计求和(只适用数值类型)
match (n:Person) return sum(n.age) -
avg: 求平均数(只适用数值类型)
match (n:Person) return avg(n.age) -
min: 统计求最小值(只适用数值类型)
match (n:Person) return min(n.age) -
max: 统计求最大值(只适用数值类型)
match (n:Person) return max(n.age) -
collect: 所有的值收集起来放入一个列表,空值null将被忽略
match (n:Person) return collect(n.age) -
distinct: 去重,所有聚合函数都可以使用的聚合修饰符
match (n:Person{name:"zhangsan"})-->(m) return count(distinct m.age) -
percentileDisc: 计算百分位
match (n:Person) return percentileDisc(n.age, 0.5) -
percentileCont: 计算加权平均数
match (n:Person) return percentileCont(n.age ,0.6) -
stdev: 计算标准偏差(部分样本)
match (n:Person) return stdev(n.age) -
stdep: 计算标准差(整个样本)
match (n:Person) return stdevp(n.age)


&spm=1001.2101.3001.5002&articleId=137144515&d=1&t=3&u=7ba77d69ae304ce0974bc80cda299857)
8685

被折叠的 条评论
为什么被折叠?



