2014-10-23 9 views

risposta

4

No, attualmente non è possibile definire un'etichetta con una variabile.

Dovrai farlo nell'applicazione recuperando tutti i nodi su cui desideri aggiungere un'etichetta e inviando una query di Cypher per aggiungere questa etichetta.

Un esempio veloce in PHP:

$nodes = $client->sendCypherQuery('MATCH (n) WHERE n.nodeType = "MyType" RETURN n'); 
foreach ($nodes as $node) { 
    $label = $node->getProperty('nodeType'); 
    $id = $node->getId(); 
    $client->sendCypherQuery('MATCH (n) WHERE id(n) = '.$id.' SET n :'.$label; 
} 
3

Non è possibile utilizzare una variabile, ma è ancora in grado di farlo in una query Cypher (o almeno alcuni di loro) piuttosto che uno script. Se hai solo una manciata di etichette diverse, probabilmente funziona bene ma non è scalabile per molte etichette.

Per esempio

  1. MATCH (n) in cui la lunghezza (etichette (n)) = 0 e n.type = 'XX' SET n: XX;
  2. MATCH (n) WHERE lunghezza (etichette (n)) = 0 e n.type = 'XY' SET n: XY;
+0

Bella risposta. Felice di vedere tali modifiche in Cypher. –

0

Una soluzione mod sarebbe quella di avere una query Cypher che sembra qualcosa di simile:

start n=node({nodeId}) 
set n :LABEL with n 
return labels(n) 

ed eseguire alcuni manipolazione del testo su questa query in modo che si dovrebbe inserire l'etichetta. Ecco un esempio Java:

String setNodeLabelQuery = getQueryString(); 
setNodeLabelQuery = setNodeLabelQuery.replaceFirst("LABEL", "LABEL_B); 

Dove getQueryString() è un metodo che restituisce la stringa della query.