2014-04-29 9 views
6

ja karmię moje neo4j db ręcznie za pomocą Cypher, więc podatne na błędy jak tworzenie duplikatów węzłów:neo4j połączyć 2 lub kilka duplikatów węzłów

duplikatów węzłów będzie miał każdy relacji do innych węzłów. Czy istnieje wbudowana funkcja łączenia tych węzłów? Czy powinienem zrobić to ręcznie?

Brzmi to możliwe, ale skomplikowane z Cypher skryptu:

    1. uzyskać relacji każdego duplikatu węzła
    1. odtworzyć je (wraz z ich właściwości) z poprawnym węzłem (dany identyfikator węzła)
    1. Usuń relacje z duplikatów węzłów
    1. i ostatecznie usunąć zduplikowane węzły.

Odpowiedz

2

Aby uniknąć takiej sytuacji w przyszłości, proszę spojrzeć na MERGE słów kluczowych w Cypher. Niestety, o ile mi wiadomo, nie ma nic w Cypher (jeszcze) tak:

MATCH (n:MyNode),(m:MyNode) 
WHERE ID(n) <> ID(m) AND 
PROPS(n) IN PROPS(m) AND PROPS(m) IN PROPS(n) 
(...) DELETE (...) 

fikcyjnych rekwizytów funkcyjnych trzeciej linii jest nie częścią języka Cypher i funkcje zdefiniowane przez użytkownika nie dokonałeś to jeszcze w Neo4j.

Jeśli nie pracujesz z instancjami produkcyjnymi, najprościej jest wykonać kopię zapasową folderu danych i spróbować uruchomić wstawianie (z MERGE).

W przeciwnym razie możesz również spróbować wpisać traversal, aby zebrać duplikaty i usunąć je partiami (tutaj jest example z interfejsem API REST).

2

Spróbuj tego:

MATCH (n:MyNode),(m:MyNode),(o:OtherNode {id:123}) 
WHERE n <> m 
MATCH (m)-[r:FOO]->() 
CREATE (n)-[r2:FOO]->(o) 
SET r2 = r 
DELETE r,m 
+8

Zamiast po prostu mówiąc: „spróbować” można przedstawić szczegółowy opis tego, co wyżej fragment robi i jak to działa? –

Powiązane problemy