2017-07-29 2 views
1

J'ai un graphique qui ressemble à ce qui suit:requête Neo4j Cypher pour plusieurs à plusieurs

Brand--SOLD_BY-->Store 

Une marque d'un certain point peut être vendu par plusieurs magasins. De même, un seul magasin peut vendre plusieurs marques d'articles. Ce que je veux atteindre est de trouver tous les magasins qui vendent une marque particulière, mais dans le résultat avec le magasin, je voudrais aussi les autres marques qui sont vendues par ce magasin particulier.

Par exemple:

marque1 est vendu par StoreA, StoreB, StoreC. Le résultat devrait ressembler à quelque chose comme ..

StoreA - marque1, marque2

StoreB - marque1, Brand3

StoreC - marque1

J'ai réussi à trouver les magasins, mais je ne suis pas être capable de trouver les autres marques vendues par le magasin.

MATCH (b:Brand)-[s:SOLD_BY]->(s:Store) 
WHERE b.id=1 
WITH DISTINCT s AS stores 
RETURN stores 

Une chose que j'ai pensé est si je dois boucle à l'intérieur des magasins collectées et trouver les marques, mais je ne sais pas comment efficace qui serait depuis le graphique peut avoir de nombreux nœuds.

Toute aide serait appréciée, merci.

Répondre

0

Vous pouvez essayer cette requête:

MATCH (:Brand {id:1})-[:SOLD_BY]->(s:Store) 
RETURN s, [ (b)-[:SOLD_BY]->(s) | b] AS brands 

Voir ce lien pour avoir plus d'informations: https://neo4j.com/blog/cypher-graphql-neo4j-3-1-preview/

Vive

+0

Whoops, je pense que vous vouliez dire utiliser 'b' pour remplir votre compréhension modèle au lieu de 's'. – InverseFalcon

+0

Correction effectuée. Merci mon pote ! – logisima

+0

Merci pour votre aide! Ça a marché comme sur des roulettes. Une question rapide que je voudrais poser - Quelle sera l'efficacité de cette requête si j'ai dit plus de 10000 nœuds? Je suppose que la compréhension du modèle boucle sur chaque nœud, donc je me demandais si cela ralentirait le processus pour un grand nombre de nœuds. Merci encore. –