模式是用于描述如何搜索数据,通常用 ()标识节点,用 [] 标识关系,看一下下面的几种模式:
1. 节点模式
节点具有属性和标签,Cypher为了引用节点,需要给节点命名:
- (n) :该模式用于描述节点,节点的变量名是n ;匿名节点是 ();
- (n:label) :该模式用于描述节点,节点具有特定的标签,也可以指定多个标签;
- (n:{name:'Brown'}) :节点具有name属性,并且name属性值是 Brown ,也可以指定多个属性;
- (n:label{name:'Brown'}):节点具有特定的标签和name属性,并且name属性值是Brown;
2. 关系模式
在属性图中,节点之间存在关系,关系通过[]表示,节点之间的关系通过 ()-[]->()表示,例如:
- [r]:该节点用于描述关系,关系变量名是 r;匿名关系是[];
- [r:type]:该模式用于描述关系,关系类型是type;每一个关系必须有且仅有一个类型;
- [t:type{name:'Bro'}]:关系的类型是type,并且name属性是Bro;
3. 关联节点模式
节点之间通过关系联系在一起,由于关系具有方向性,-->表示存在有向的关系,--表示存在关联,不指定关系的方向,如:
- (a)-[r]->(b):该模式用于描述节点a和b之间存在有向的关系r;
- (a)-->(b):描述a和b之间存在有向的关系;
4. 变长路径的模式
从一个节点,通过关系连接到另外一个节点,这个过程叫遍历,经过的节点和关系的组合叫路径(path),路径是由节点和关系的有序组合。
- (a)-->(b):是步长为1的路径,节点a和b之间有关系直接关联;
- (a)-->()-->(b):是步长为2的路径,从节点a经过两个关系、1个节点到达节点b;
Cypher语言支持变长路径的模式,变长路径的表示方式是:[*N..M],N和M表示路径长度最小值和最大值。
- (a)-[*2]->(b):表示路径长度是2,起始节点a,终止节点b;
- (a)-[*3..5]->(b):表示路径路径长度最小值是3,最大值是5,起始节点是a,终止节点是b;
- (a)-[*..5]->(b):表示路径的最大长度是5,起始节点是a,终止节点是b;
- (a)-[*3..]->(b):表示路径的最小长度是3,起始节点是a,终止节点是b;
- (a)-[*]->(b):表示不限制路径长度,起始节点a,终止节点b;
5. 路径变量
路径可以指定给一个变量,该变量是路径变量,用于引用查询路径:
p=(a)-[*3..5]->(b)
例子:图中有6个节点,每个节点都有一个属性name,节点之间的关系类型是KNOWS,
如果要根据查询模式,查询跟Fillpa节点有关系的人,并限制路径长度为1或者2,可用如下查询模式(注意这里关系模式没有方向性):
match (a)-[:KNOWS*1..2]-(b)
where a.name='Fillpa'
return b.name
返回结果为:Dilshad或者Anders。