web-dev-qa-db-fra.com

neo4j comment retourner toutes les étiquettes de noeud avec Cypher?

Je ne trouve pas comment renvoyer les étiquettes d'un nœud avec Cypher.

Quelqu'un connaît la syntaxe de cette opération?

47
Sovos

Il existe une étiquette de fonction (nœud) qui peut renvoyer toutes les étiquettes d'un nœud.

50
Lisa Li

Pour obtenir toutes les étiquettes de nœuds distinctes:

MATCH (n) RETURN distinct labels(n)

Pour obtenir le nombre de nœuds pour chaque étiquette:

MATCH (n) RETURN distinct labels(n), count(*)
67
petra

Si vous voulez toutes les étiquettes individuelles (pas les combinaisons), vous pouvez toujours développer les réponses:

MATCH (n)
WITH DISTINCT labels(n) AS labels
UNWIND labels AS label
RETURN DISTINCT label
ORDER BY label
18
ErnestoE

Neo4j 3.0 a introduit la procédure db.labels() qui retourne toutes les étiquettes disponibles dans la base de données. Utilisation:

call db.labels();
17
Bruno Peres
 START n=node(*) RETURN labels(n)
5
gaurav.singharoy

Si vous utilisez l'API Java, vous pouvez rapidement obtenir un itérateur de tous les Label dans la base de données comme ceci:

GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase);
ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels();
3
Ken Williams

Si vous souhaitez obtenir les étiquettes d'un nœud spécifié, utilisez labels(node); Si vous ne souhaitez obtenir que toutes les étiquettes de noeud dans neo4j, utilisez plutôt cette fonction: call db.labels;, N'utilisez jamais cette requête: MATCH n RETURN DISTINCT LABELS(n). Il fera un scan complet de la table, ce qui est très très lent.

2
arganzheng