为什么在查询中使用方向关系时会出现重复结果?
让我们按照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只是导演导演的电影,所以第二排错了!
答案 0 :(得分:0)
指定关系类型时,应在关系类型名称前使用:
。你忘记了:
试一试(注意:
之前的DIRECTED
和PRODUCED
):
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"}│
└──────────────────┴─────────────────────┴──────────────────┘