基础使用
1.布尔逻辑判断
AND OR XOR NOT
MATCH (n)
WHERE n.name = 'Peter' XOR (n.age < 30 AND n.name = 'Timothy') OR NOT (n.name = 'Timothy' OR n.name = 'Peter')
RETURN n.name, n.age
2.通过节点标签过滤
MATCH (n)
WHERE n:Swedish
RETURN n.name, n.age
3.通过节点属性过滤
MATCH (n)
WHERE n.age < 30
RETURN n.name, n.age
4.关系属性过滤
MATCH (n)-[k:KNOWS]->(f)
WHERE k.since < 2000
RETURN f.name, f.age, f.email
5.动态节点属性过滤
WITH 'AGE' AS propname
MATCH (n)
WHERE n[toLower(propname)]< 30
RETURN n.name, n.age
6.属性是否存在过滤
MATCH (n)
WHERE exists(n.belt)
RETURN n.name, n.belt
字符串过滤
1.开头过滤
MATCH (n)
WHERE n.name STARTS WITH 'Pet'
RETURN n.name, n.age
2.结尾过滤
MATCH (n)
WHERE n.name ENDS WITH 'ter'
RETURN n.name, n.age
3.包含过滤
MATCH (n)
WHERE n.name CONTAINS 'ete'
RETURN n.name, n.age
4.否定过滤
MATCH (n)
WHERE NOT n.name ENDS WITH 'y'
RETURN n.name, n.age
正则表达式
1.转义
MATCH (n)
WHERE n.email =~ '.*\\.com'
RETURN n.name, n.age, n.email
2.大小写敏感
(?i)添加在正则表达式之前
MATCH (n)
WHERE n.name =~ '(?i)AND.*'
RETURN n.name, n.age
路径
MATCH (timothy { name: 'Timothy' }),(others)
WHERE others.name IN ['Andy', 'Peter'] AND (timothy)<--(others)
RETURN others.name, others.age
2.否定路径
MATCH (persons),(peter { name: 'Peter' })
WHERE NOT (persons)-->(peter)
RETURN persons.name, persons.age
3.路径属性
MATCH (n)
WHERE (n)-[:KNOWS]-({ name: 'Timothy' })
RETURN n.name, n.age
4.关系类型
MATCH (n)-[r]->()
WHERE n.name='Andy' AND type(r)=~ 'K.*'
RETURN type(r), r.since
列表
MATCH (a)
WHERE a.name IN ['Peter', 'Timothy']
RETURN a.name, a.age
Missing properties and values
使用范围
1.<,<=,>,>=
MATCH (a)
WHERE a.name >= 'Peter'
RETURN a.name, a.age
2.配合逻辑连接词
MATCH (a)
WHERE a.name > 'Andy' AND a.name < 'Timothy'
RETURN a.name, a.age
参考文献:
https://neo4j.com/docs/developer-manual/3.4/cypher/clauses/where/