mam węzły bez etykiety, ale własności wartości NodeTypeneo4j - jak ustawić etykietę z wartości nieruchomości
Czy istnieje sposób, aby ustawić etykietę tych węzłów z wartością nieruchomości NODETYPE?
Dzięki!
mam węzły bez etykiety, ale własności wartości NodeTypeneo4j - jak ustawić etykietę z wartości nieruchomości
Czy istnieje sposób, aby ustawić etykietę tych węzłów z wartością nieruchomości NODETYPE?
Dzięki!
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;
}
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
- dostosowania (n), w którym długość (etykiety (n)) = 0 i n.type = 'XX' zestawie Nd: XX;
- MATCH (n) GDZIE długość (etykiety (n)) = 0 i n.type = "XY" ZESTAW n: XY;
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.
Dobra odpowiedź. Cieszę się, że widzę takie poprawki w Cypher. –