2017-07-14 52 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不客氣! :) –