2014-11-18 26 views
5

Scalenie Neo4j utworzy nowy węzeł, jeśli nie istnieje. I ma ON CREATE i ON MATCH jako dwa wyróżnienia. Czy istnieje jednak sposób na zwrócenie różnych informacji, jeśli węzeł został utworzony, jeśli węzeł został dopasowany?Neo4j scalanie zwracaj coś tylko wtedy, gdy zostało utworzone

MERGE (charlie { name:'Charlie Sheen' }) 
ON CREATE SET charlie.name = 'Charlie' 
RETURN charlie 

Coś jak: ON CREATE RETURN 1, ON MERGE RETURN 0

+1

Sprawdź odpowiedź na to pytanie. http://stackoverflow.com/questions/20274979/is-it-possible-to-determine-if-a-cypher-merge-results-in-a-rerea- or-a-atch – JohnMark13

Odpowiedz

7

Jest relevant example on the merge page of the documentation:

MERGE (keanu:Person { name:'Keanu Reeves' }) 
ON CREATE SET keanu.created = timestamp() 
ON MATCH SET keanu.lastSeen = timestamp() 
RETURN keanu.name, has(keanu.lastSeen); 

Zasadniczo przechowuje 0 lub 1 flagę istnienia lub braku atrybutu "lastSeen".

Twoje zapytanie ma tę dziwność, że pasujesz do "Charlie Sheen", ale potem modyfikujesz dopasowaną wartość (name) na "Charlie". To dziwne - oznacza to, że ponieważ modyfikujesz go za każdym razem, nawet jeśli dodasz klauzulę ON MATCH, nigdy się nie uruchomi. Utworzysz go za każdym razem, a następnie zmienisz, gwarantując, że zostanie utworzony nowy przy następnym uruchomieniu tego zapytania. Przypuszczam, że niewłaściwym pomysłem jest zmodyfikowanie warunków dopasowania w późniejszym terminie w zapytaniu, chyba że jest to szczególna okoliczność.

+0

Cypher na moje pytanie jest tylko losowy przykład. Po prostu zapisałem to tylko dla tego pytania. Chcę to zaimplementować w aktualizacji statusu "lubi". Zasadniczo chcę upewnić się, że post nie jest polubiony przez użytkownika dwa razy i że zapytanie zawiera informacje 'ma (...)'. Twoja odpowiedź rozwiązuje mój problem. Dzięki. – pewpewlasers

Powiązane problemy