Neo4j 在方向关系上重复结果

Neo4j duplicate results on directional relationship

为什么在查询中使用方向关系时会得到重复的结果?

让我们按照 Neo4j 在示例中使用电影的惯例,我有一位导演在两部不同的电影中担任两个角色,一部是他导演的,另一部是制片人:

create (M1:MOVIE {name:'movie 1'}),
       (M2:MOVIE {name:'movie 2'}),
       (D1:DIRECTOR {name:'director 1'}),
       (D1)-[:PRODUCED]->(M2), (D1)-[:DIRECTED]->(M1)

让我们得到所有执导和制作电影的导演

MATCH (m1:MOVIE)<-[DIRECTED]-(d1:DIRECTOR)-[PRODUCED]->(m2:MOVIE) 
RETURN m1, d1, m2

结果重复:

╒══════════════════╤═════════════════════╤══════════════════╕
│"m1"              │"d1"                 │"m2"              │
╞══════════════════╪═════════════════════╪══════════════════╡
│{"name":"movie 2"}│{"name":"director 1"}│{"name":"movie 1"}│
├──────────────────┼─────────────────────┼──────────────────┤
│{"name":"movie 1"}│{"name":"director 1"}│{"name":"movie 2"}│
└──────────────────┴─────────────────────┴──────────────────┘

其实也是错的,我以为m1只是导演的电影,所以第二行错了!

指定关系类型时,您应该在关系类型名称前使用 :。你忘记了:

尝试一下(注意 DIRECTEDPRODUCED 之前的 :

MATCH (m1:MOVIE) <-[:DIRECTED]- (d1:DIRECTOR) -[:PRODUCED]-> (m2:MOVIE)
RETURN m1, d1, m2

结果:

╒══════════════════╤═════════════════════╤══════════════════╕
│"m1"              │"d1"                 │"m2"              │
╞══════════════════╪═════════════════════╪══════════════════╡
│{"name":"movie 1"}│{"name":"director 1"}│{"name":"movie 2"}│
└──────────────────┴─────────────────────┴──────────────────┘