2014-10-23 13 views

Odpowiedz

4

Nie, obecnie nie ma możliwości zdefiniowania etykiety ze zmienną.

Będziesz musiał to zrobić w swojej aplikacji, pobierając wszystkie węzły, które chcesz dodać do etykiety i wysyłając zapytanie Cypher, aby dodać tę etykietę.

Szybki przykład w 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

Nie można użyć zmiennej, ale wciąż można zrobić to w zapytaniu Cypher (lub przynajmniej niektóre z nich), a nie skryptem. Jeśli masz tylko kilka różnych etykiet, prawdopodobnie działa to dobrze, ale nie jest to skalowalne dla wielu etykiet.

Na przykład

  1. dostosowania (n), w którym długość (etykiety (n)) = 0 i n.type = 'XX' zestawie Nd: XX;
  2. MATCH (n) GDZIE długość (etykiety (n)) = 0 i n.type = "XY" ZESTAW n: XY;
+0

Dobra odpowiedź. Cieszę się, że widzę takie poprawki w Cypher. –

0

Rozwiązanie Hack byłoby mieć Cypher kwerendę, która wygląda mniej więcej tak:

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

i uruchomić manipulacji tekstu na tego zapytania tak, że można wstawić etykietę. Oto przykład Java:

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

Gdzie getQueryString() to metoda, która zwraca ciąg kwerendy.

Powiązane problemy