节点与关系组合在一起形成一个模式,如:(n:notice)-[r:quote]->(n2:notice)
2.1 基本用法
2.1.1 关系查找
例1:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)的所有相关联的节点
match(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”})–(m) return m
例2:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)引用的所有节点
match(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”})-[:quote]->(m) return m
例3:查询引用政策(id=9b116c59723cd7a704a6913f35b69cc9)的所有节点
match(m)-[:quote]->(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”}) return m
例4:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)的附件或者引用文章
match(n)-[:attach | :quote]->(m) where n.id=“9b116c59723cd7a704a6913f35b69cc9” return m
例5:关系里有特殊字符时,用符号 ` 括起来(不建议取名带特殊字符和关键词)
match(n)-[:TYPE WITH SPACE
]->(m) return m
2.1.2 路径查询
例1:查询所有含有引用关系的通告与通告的关系图
match(a:notice)-[r:quote]->(b:notice) return a,r,b
例2:查询通告(id=9b116c59723cd7a704a6913f35b69cc9)引用长度为2到3的路径
match pth=(a:notice{id:“9b116c59723cd7a704a6913f35b69cc9”})-[:quote*2…3]-(b:notice) return pth
例3:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)与政策(id=dc17c409a22489e88e7db5319058631c)之间的最短路径
match(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”}),(m:notice{id:“dc17c409a22489e88e7db5319058631c”}),p=shortestPath((n)-[*1…10]-(m)) return p
例4:在where中使用路径查询
match(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”}),(m) where m.category=“财政立法与执法” and (n)<–(m) return m
2.2 其他用法
2.2.3 模式变量
模式可以定义变量来接收,如:ak=(n:notice)-[r:quote]->(n2:notice),变量可以用于其他表达式
例1:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)关联的所有节点
match ak=(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”})-[r]->(m) return NODES(ak)
2.2.4 map投射
例1:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)的基本信息和他引用的所有通告信息
match(n)-[r:quote]->(m) where n.id=“9b116c59723cd7a704a6913f35b69cc9” return n {.id,.category,.created_date,articles:collect(m{.id,.category})}
2.2.5 with语法
with在cypher中起到管道的作用,可以将一个查询的输出连接到另一个查询的输入。
例1:查询每一篇通告引用的通告数
match(n:notice)-[r:quote]->(n2:notice) with n,count® as qs return n {.title,qs}
2.2.6 optional match
类似sql中的outer join操作
例1:查询政策(id=9b116c59723cd7a704a6913f35b69cc9)的关联节点
match(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”}) optional match (n)–(m) return n,m
2.2.7 foreach语句
例1:将政策(id=9b116c59723cd7a704a6913f35b69cc9)与政策(id=dc17c409a22489e88e7db5319058631c)引用路径上的所有节点加属性marked=true
match p=(n:notice{id:“9b116c59723cd7a704a6913f35b69cc9”})-[:quote*…10]->(m:notice{id:“dc17c409a22489e88e7db5319058631c”})
foreach ( nd in nodes§ | set nd.marked=true )