neo4j(一)入门篇(3)

1、使用WHERE

MATCH(person:Person)
WHERE person.name="Tom Hanks"
RETURN person

  相当于

MATCH(person:Person {name:"Tom Hanks"})
RETURN person

  

2、使用比较语句进行筛选

我们可以通过比较不同节点的属性值来进行筛选

筛选出和Tom Hanks在同一部电影中出演的演员并且该演员的年龄要大于Tom Hanks

MATCH(tom:Person)-[:ACTED_IN]->()<-(:ACTED_IN)-(actor:Person)
WHERE tom.name="Tom Hanks" AND
        tom.born<actor.born
Return actor.name AS names

  比较语句有>,<=,>=,<=,<>,=,is null is not null,{element} IN {LIST}

这里我们使用了()而没有在()中声明Movie,因为我们不关心他们共同出演的电影的名字。

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(movie:Movie),
(movie)<-[:ACTED_IN]-(actor:Person) // note how the line break doesn't break the query
WHERE actor.born < tom.born
RETURN DISTINCT actor.name AS Name, (tom.born - actor.born) AS diff

  为将MATCH语句断开,我们可以使用中间变量movie来断开句子。同时我们可以显示年龄差异,在RETURN语句中使用一个表达式AS diff来显示年龄差异。

3、使用Patterns进行筛选

使用exists表示pattern存在,不存在NOT exists

如:我们要找与Gene Hackman在同一部电影中出演的演员同时又是导演的人

MATCH (p:Person)-[:ACTED_IN]->(movie:Movie),
(actor:Person)-[:ACTED_IN]->(movie)
WHERE p.name="Gene Hackman"
exists((actor)-[:DIRECTED]->()) RETURN DISTICT actor.name as Name

  如要找和Gene Hackman同时出演电影的演员但是,Robin williams不在共同出演的电影中。

MATCH (gene:Person {name:"Gene Hackman"})-[:ACTED_IN]->(movie:Movie),
      (other:Person)-[:ACTED_IN]->(movie),
      (robin:Person {name:"Robin Williams"})
WHERE NOT exists( (robin)-[:ACTED_IN]->(movie) )
RETURN DISTINCT other

 4、使用IN判断元素是否在列表中

如:找到Keanu Reeves扮演Neo角色的所有电影

MATCH (p:Person {name:"Keanu Reeves"})-[r:ACTED_IN]->(movie:Movie)
WHERE "NEO" IN r.roles
RETURN movie

  

5、比较paths

path是由一系列节点和关系组成的。

在Cypher中我们可以使用* 来代表可变长度的paths

MATCH (node1)-[*]-(node2)

  

  • 遍历任何深度的关系是: (a)-[*]->(b)
  • 特定的关系深度表示(a)-[*depth]->(b)为找到所有路径的确切depth步长
  • 从一级到四级深度的关系表示如下: (a)-[*1..4]->(b)
  • 类型KNOWS3级距离的关系:(a)-[:KNOWS*3]->(b)
  • 类型KNOWSLIKES2级距离以上的关系:(a)-[:KNOWS|:LIKES*2..]->(b)

返回path

MATCH p=(actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person)
RETURN p;

  返回path意味着返回所有的节点和关系。

我们可以使用nodes(p)来仅仅返回节点,使用rels(p)来仅仅返回关系。

 

posted @ 2018-09-13 18:21  tutu_python  阅读(374)  评论(0)    收藏  举报