web-dev-qa-db-fra.com

Comment obtenir tous les nœuds connectés dans neo4j

enter image description here

Je veux obtenir la liste de tous les nœuds connectés à partir du nœud 0, comme indiqué dans le diagramme

16
chetan dev

Sur la base de votre commentaire:

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

Cette requête fera ce que vous voulez:

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

La requête ci-dessus renverra tous les nœuds connectés à un nœud avec id=0 (Je considère que les nombres à l'intérieur des nœuds 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 Relations en profondeur de la documentation.

Bien que cela fonctionne bien pour les petits graphiques, notez que c'est une opération très coûteuse. Il parcourra tout le graphique en 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.

12
Bruno Peres

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 renverra tous les nœuds qui ont une relation avec un autre nœud ou des nœuds, quelle 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
5
Trishant Pahwa

Pour les graphiques plus grands ou plus fortement interconnectés, Procédures APOC offre un moyen de traversée plus efficace qui renvoie tous les nœuds d'un sous-graphique.

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.

En utilisant une étiquette de "Label" et un paramètre de idParam, une requête pour obtenir les nœuds du sous-graphique avec APOC serait:

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

Les nœuds seront distincts et le nœud de départ ne sera pas renvoyé avec le reste.

ÉDITER

Il existe actuellement une restriction empêchant l'utilisation de minLevel dans subgraphNodes(), vous pouvez soit filtrer le nœud de départ vous-même, soit utiliser apoc.path.expandConfig() en utilisant uniqueness:'NODE_GLOBAL' Pour obtenir le même effet.

4
InverseFalcon