2017-07-14 8 views
1

Pourquoi ai-je des résultats en double lorsque j'utilise des relations directionnelles dans ma requête?Neo4j duplique les résultats sur la relation directionnelle

Suivons convention Neo4j d'utiliser des films dans les exemples, j'ai un directeur qui a deux rôles dans deux films différents, on a dirigé et l'autre, il était un producteur:

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

nous allons obtenir tous les administrateurs qui réalisé et produit un film

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

résultat est dupliqué:

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

en fait c'est aussi faux, je m'attendais à ce que m1 ne soit que des films dirigés par le réalisateur, donc la deuxième rangée est fausse!

Répondre

0

Lorsque vous spécifiez un type de relation, vous devez utiliser : avant le nom du type de relation. Vous l'avez oublié:

l'essayer (notez le : avant DIRECTED et PRODUCED):

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

Le résultat:

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

Oh Jésus, je vous remercie beaucoup .. été devient fou à elle ! – dendini

+0

@dendini Vous êtes les bienvenus! :) –