2017-09-10 1 views
1

J'ai un graphique qui représentera la hiérarchie pour les nœuds comme celui-ci. Disons que celui-ci représente la hiérarchie complète mais j'ai aussi besoin de créer un résultat intermédiaire en regroupant à différents niveaux. Supposons que je demande des données pour le noeud A. Je souhaite regrouper les noeuds à la relation de groupe la plus proche. Je serais d'obtenir quelque chose comme ceci: graph summary ARegroupement Neo4j avec deux relations

Fondamentalement, les utilisateurs seront autorisés à associer à des nœuds groupe et je dois représenter les données de la manière commode d'afficher un graphique Org.

Je ne sais pas par où commencer pour obtenir la solution optimale.

Voici mon neo4js db:

CREATE (a:Node { name: 'a' }), (b:Node { name: 'b' }), 
    (c:Node { name: 'c' }), (d:Node { name: 'd' }), 
    (e:Node { name: 'e' }), (f:Node { name: 'f' }), 
    (g:Node { name: 'g' }), (h:Node { name: 'h' }), 

    (g1:Group { name: 'group1'}), 
    (g2:Group { name: 'group2'}), 
    (g3:Group { name: 'group3'}), 

    (a)-[:child]->(b), 
    (a)-[:child]->(c), 
    (a)-[:child]->(d), 
    (b)-[:child]->(e), 
    (c)-[:child]->(f), 
    (c)-[:child]->(g), 
    (c)-[:child]->(h), 

    (b)-[:belongsTo]->(g1), 
    (c)-[:belongsTo]->(g2), 
    (g)-[:belongsTo]->(g3), 
    (h)-[:belongsTo]->(g3); 

Neo4j console

Répondre

0

Si vous voulez voir combien d'organisations sont contenus dans un groupe donné, cela est simple:

MATCH (g:Group)<-[:belongsTo]-(x:Node) 
RETURN g.name, count(x); 

qui donnera vous chaque nom de groupe, avec combien de nœuds sont dedans.