2017-07-14 57 views
1

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

让我们遵循的例子使用的电影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

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

试试吧(注意:之前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"}│ 
└──────────────────┴─────────────────────┴──────────────────┘ 
+0

哦耶稣,太感谢你了..渐渐在它​​疯狂! – dendini

+0

@dendini不客气! :) –