2017-07-11 3 views
2

enter image description hereComment obtenir tous les noeuds connectés à Neo4j

Je veux obtenir la liste de tous les noeuds connectés à partir du noeud 0 comme indiqué dans le diagramme

+0

Pouvez-vous être un peu plus précis? quel résultat voulez-vous avoir? – logisima

+0

Je veux obtenir une liste de tous les nœuds connectés. Par exemple dans le cas ci-dessus quand je recherche des nœuds connectés pour 0, il devrait renvoyer des nœuds 1,2,3. –

Répondre

3

Sur la base de votre commentaire:

I vouloir obtenir une liste de tous les nœuds connectés. Par exemple, dans le cas ci-dessus lorsque je recherche des noeuds connectés pour 0, il doit retourner nodes- 1,2,3

Cette requête fera ce que vous voulez:

MATCH ({id : 0})-[*]-(connected) 
RETURN connected 

ci-dessus requête retournera tous les noeuds connectés avec le noeud avec id=0 (je considère que les nombres à l'intérieur des noeuds sont des valeurs d'une propriété id) dans n'importe quelle profondeur, dans les deux directions et en considérant n'importe quel type de relation. Jetez un oeil dans la section Relationships in depth des docs.

Bien que cela fonctionne bien pour les petits graphiques, notez que c'est une opération très coûteuse. Il passera par tout le graphique commençant à partir du point de départ ({id : 0}) compte tenu de tout type de relation. Ce n'est vraiment pas une bonne idée pour les environnements de production.

+0

dans le cas d'un graphique cyclique, il donne des nœuds en double –

+0

@chetandev Essayez: 'MATCH (racine {id: 0}) - [*] - (connecté) O WH racine <> connecté RETURN distinct connecté' –

1

Si vous souhaitez faire correspondre les nœuds qui ont une relation avec un autre nœud, vous pouvez utiliser ceci:

MATCH (n) MATCH (n)-[r]-() RETURN n,r 

Il vous ramènera tous les nœuds qui ont une relation avec un autre nœud ou nœuds, quel que soit la direction de la relation.

Si vous souhaitez ajouter une contrainte, vous pouvez le faire de cette façon:

MATCH (n:Label {id:"id"}) MATCH (n)-[r]-() RETURN n,r 
1

Pour plus ou plus fortement interconnectés graphiques, APOC Procedures offre un moyen plus efficace de traversal qui retourne tous les nœuds dans un sous-graphe.

Comme d'autres l'ont déjà mentionné, il est préférable d'utiliser des étiquettes sur vos nœuds et d'ajouter un index ou une contrainte unique sur la propriété label + pour une recherche rapide de votre nœud de départ.

l'aide d'une étiquette de « étiquette », et un paramètre de idParam, une requête pour obtenir des noeuds du sous-graphe avec APOC serait:

MATCH (n:Label {id:$idParam}) 
CALL apoc.path.subgraphNodes(n, {minLevel:1}) YIELD node 
RETURN node 

nœuds seront distincts, et le noeud de départ ne sera pas retourné avec le reste.