2012-07-06 8 views
17

W programie Cypher w Neo4J, biorąc pod uwagę dwa węzły, jeśli nie ma między nimi związku, chciałbym utworzyć relację (typu Foo) z właściwością wagi jednego. Jeśli ten związek już istnieje, chciałbym zwiększyć jego wagę.W Cypher, jak mogę utworzyć związek, jeśli nie istnieje; zaktualizuj właściwość, jeśli ma wartość

Czy jest to dobry sposób na wykonanie tego zadania w pojedynczym zapytaniu na Cyphera? Dzięki!

Edytuj: Niektóre dodatkowe szczegóły: Węzły są już utworzone, unikatowe i znajdują się w indeksie.

+0

Czy jesteś w porządku z użyciem wersji migawkę neo4j? W neo4j 1.8 można zaktualizować wykres za pomocą Cyphera, ale nie w innych wersjach. – Nicholas

+0

Tak, używam SNAPSHOT. – Newtang

+0

Więc zasadniczo chcesz skanować wszystkie węzły, a jeśli jest podłączony, zwiększyć, jeśli nie, utworzyć związek? – Nicholas

Odpowiedz

44

Właśnie dlatego dodaliśmy CREATE UNIQUE w wersji 1.8.

START a=node(...), b=node(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]-b 
SET r.weight = coalesce(r.weight?, 0) + 1 

Przeczytaj więcej o CREATE UNIQUEhere, znaku zapytania here i zlewają here.

+0

Idealnie! Właśnie tego szukałem. Wiedziałem o RELATE, ale nie o frazie koalescencji. Co dokładnie oznacza "?" zrobić? – Newtang

+0

Edytowano odpowiedź, aby wskazać instrukcję – Andres

+4

Od Neo4j 2.0? operator został usunięty. Zobacz: http://neo4j.com/docs/snapshot/query-operators.html#query-operators-comparison –

10

Aby zakończyć Andres odpowiedź, znak zapytania na końcu nieruchomości jest błąd z Neo4j 2. prośba Więc będzie:

MATCH a, b 
WHERE a(...) AND b(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]->b 
SET r.weight = coalesce(r.weight, 0) + 1 
Powiązane problemy