Ответ 1
CREATE UNIQUE
имеет немного более неясную семантику, чем MERGE
. MERGE
был разработан как альтернатива с более интуитивным поведением, чем CREATE UNIQUE
; если есть сомнения, MERGE
обычно является правильным выбором.
Самый простой способ думать о MERGE
- это как MATCH-или-create. То есть, если что-то в базе данных будет MATCH
шаблоном, который вы используете в MERGE
, тогда MERGE
просто вернет этот шаблон. Если ничего не соответствует, MERGE
создаст все отсутствующие элементы в шаблоне, где отсутствующий элемент означает любой несвязанный идентификатор.
Учитывая
MATCH (a {uid:123})
MERGE (a)-[r:LIKES]->(b)-[:LIKES]->(c)
"a" является связанным идентификатором с точки зрения MERGE. Это означает, что cypher как-то уже знает, какой node он представляет.
Это утверждение может иметь два результата. Либо весь шаблон уже существует, и ничего не будет создано, или части шаблона отсутствуют, и будет создан целый новый набор отношений и узлов, соответствующих шаблону.
<сильные > Примеры
// Before merge:
(a)-[:LIKES]->()-[:LIKES]->()
// After merge:
(a)-[:LIKES]->()-[:LIKES]->()
// Before merge:
(a)-[:LIKES]->()-[:OWNS]->()
// After merge:
(a)-[:LIKES]->()-[:OWNS]->()
(a)-[:LIKES]->()-[:LIKES]->()
// Before merge:
(a)
// After merge:
(a)-[:LIKES]->()-[:LIKES]->()