2017-06-23 3 views
2

J'ai plusieurs noeuds avec des étiquettes différentes de la forme:Convertir toutes les valeurs de toutes les propriétés en minuscules dans Neo4j

(n:Label) 
n.Name='ABS' 
n.sample='ajx' 

Je souhaite modifier toutes les valeurs d'attributs en minuscules. à-dire le résultat de ce qui précède doit être:

(n:Label) 
n.Name='abs' 
n.sample='ajx' 

J'ai essayé ce qui suit ...

match(n:Label) SET n.Name`=toLower(n.Name) 

Mais cette requête met à jour uniquement les attributs un à la fois. Est-il possible de modifier tous les attributs simultanément dans une seule requête.

+0

Alors avez-vous essayé quelque chose? –

+0

J'ai essayé d'obtenir les propriétés 1 par 1, mais c'est fastidieux et je veux savoir s'il s'agit d'une requête plus intelligente. – pHM

+1

Vous devez mentionner la requête que vous avez essayé dans la publication. –

Répondre

3

Vous pouvez le faire avec l'aide de APOC procedures. Spécifiquement apoc.create.setProperty procédure. Cette requête devrait fonctionner:

MATCH (n) 
WITH n, [x IN keys(n) 
     WHERE n[x] =~ '.*' 
] as props 
UNWIND props as p 
CALL apoc.create.setProperty(n, p, toLower(n[p])) YIELD node 
RETURN node 

Cette requête correspond à tous les nœuds de votre graphique et obtient les propriétés de la chaîne de chaque nœud. Après cela, apoc.create.setProperty est appelé pour chaque propriété passant comme nouvelle valeur toLower(node[property]).

+0

Merci! Fonctionne comme un charme! – pHM