Ho nodi senza etichetta, ma un NodeType proprietàNeo4j - come impostare un'etichetta con il valore della proprietà
C'è un modo per impostare l'etichetta di quei nodi con il valore della proprietà NodeType?
Grazie!
Ho nodi senza etichetta, ma un NodeType proprietàNeo4j - come impostare un'etichetta con il valore della proprietà
C'è un modo per impostare l'etichetta di quei nodi con il valore della proprietà NodeType?
Grazie!
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;
}
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
- MATCH (n) in cui la lunghezza (etichette (n)) = 0 e n.type = 'XX' SET n: XX;
- MATCH (n) WHERE lunghezza (etichette (n)) = 0 e n.type = 'XY' SET n: XY;
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.
Bella risposta. Felice di vedere tali modifiche in Cypher. –