2015-05-01 37 views
9

Mój cel to , aby uzyskać dostęp i zmutować właściwość węzła w kwerendie cyfrowej, gdzie nazwa właściwości, do której można uzyskać dostęp i zmutowana, jest nieznaną wartością ciągu.Jak uzyskać dostęp i zmutować wartość właściwości węzła za pomocą ciągu nazw właściwości w języku Cypher?

Przykładowo, za komendę:

Znajdź wszystkich węzłów zawierających dwa takie właściwości, że nazwa pierwszego właściwości jest małymi literami, a nazwa ta ostatnia jest przedstawienie wielkimi literami Poprzedniego. Następnie, propaguj wartość właściwości z małą nazwą ciągu znaków do wartości właściwości z dużą literą.

Konkretna sprawa jest prosta:

MATCH (node) 
WHERE has(node.age) AND has(node.AGE) AND node.age <> node.AGE 
SET node.AGE = node.age 
RETURN node; 

Ale nie wydaje się znaleźć sposób, aby wprowadzić ogólne sprawy w jednym wniosku.

Konkretnie, nie jestem w stanie:

  1. dostępu do właściwości węzła z ciągiem i wartość
  2. Mutate właściwość węzła z ciągiem i wartość

Dla jasności, zawieram moją próbę załatwienia sprawy ogólnej. Tam, gdzie nie udało mi się zmodyfikować właściwości węzła, udało mi się wygenerować szyfr dla polecenia, które osiągnęłoby mój cel końcowy, gdyby zostało wykonane w kolejnej transakcji.

MERGE (justToMakeSureOneExists { age: 14, AGE : 140 }) WITH justToMakeSureOneExists 
MATCH (node) 
WHERE ANY (kx IN keys(node) WHERE kx = LOWER(kx) AND ANY (ky in keys(node) WHERE ky = UPPER(kx))) 
REMOVE node.name_conflicts // make sure results are current 
FOREACH(kx in keys(node) | 
    SET node.name_conflicts 
     = COALESCE(node.name_conflicts,[]) 
     + CASE kx 
      WHEN lower(kx) 
      THEN [] 
       + CASE WHEN any (ky in keys(node) WHERE ky = upper(kx)) 
        THEN ['match (node) where id(node) = ' + id(node)+ ' and node.' + upper(kx) + ' <> node.' + kx + ' set node.' + upper(kx) + ' = node.' + kx + ' return node;'] 
        ELSE [] END 
      ELSE [] 
      END) 
RETURN node,keys(node) 

Refleksja: Wydaje się, że zdolność do mutacji właściwość węzła według nazwy Nieruchomość byłoby dość powszechne wymaganie, ale brak oczywistego wsparcia dla funkcji pozwala mi wierzyć, że funkcja została pominięta celowo ? Jeśli ta funkcja jest rzeczywiście nieobsługiwana, czy istnieje dokumentacja wyjaśniająca, dlaczego i czy jest jakiś konflikt między podejściem a zalecanym sposobem działania w trybie Neo/Cypher?

Odpowiedz

0

Wygląda na to, że wybrana funkcja językowa została dodana do Cyphera w Neo4j 2.3.0 pod nazwą "właściwość dynamiczna". W Cypher docs od wersji 2.3.0-up zadeklarować następujące grupy składni jako ważnej wypowiedzi Cypher:

właściwości dynamiczne: n["prop"], rel[n.city + n.zip], map[coll[0]].

Ta funkcja jest udokumentowana dla 2.3.0, ale jest nieobecna w urządzeniu previous version (2.2.9).

Dziękuję zespołowi Neo4j!

3

Trwa dyskusja nad poprawą obsługi dynamicznego dostępu do nieruchomości w Cypher. Jestem przekonany, że w przyszłości otrzymamy wsparcie, ale nie mogę wypowiedzieć się na temat docelowego wydania ani daty.

Jako obejście zalecam wdrożenie tego w wersji unmanaged extension.

+0

Czy można rozszerzyć domyślne przetwarzanie szyfrowania na niezarządzane rozszerzenie? – smartcaveman

+0

Nie. Niezarządzane rozszerzenie jest prezentowane jako nowy punkt końcowy REST. –

+0

to jest to, co myślałem ... więc co dokładnie masz na myśli mówiąc, że chcesz zaimplementować właściwości mutacji według nazwy właściwości jako niezarządzanego rozszerzenia? (Interfejs API REST obsługuje to po wyjęciu z pudełka). – smartcaveman