Koma di klausa MERGE seperti yang ada di klausa MATCH?
Berikut ini berfungsi dengan baik di neo4j 4:
MATCH (a)-->(b)<--(c), (b)-->(d)
RETURN a
Tetapi yang berikut mengembalikan kesalahan:
MERGE (a)-->(b)<--(c), (b)-->(d)
RETURN a
Teks kesalahan: Neo.ClientError.Statement.SyntaxError
Invalid input ',': expected whitespace, a relationship pattern, ON, FROM GRAPH, USE GRAPH, CONSTRUCT, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE UNIQUE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, CALL, RETURN, UNION, ';' or end of input (line 1, column 22 (offset: 21))
"MERGE (a)-->(b)<--(c), (b)-->(d)"
^
Jika saya mengerti dengan benar, penggabungan memberikan tingkat fungsionalitas upsert. Tetapi apakah penggabungan lebih terbatas dalam kemampuan mencocokkan daripada mencocokkan? Bagaimana cara menggabungkan pola non-linier kompleks yang memerlukan pemisahan koma ?
Jawaban
The Seluruh MERGE
Pola akan dibuat jika setiap item dalam pola belum ada. Jadi, untuk amannya, Anda harus selalu memastikan setiap MERGE
pola hanya memiliki satu item yang mungkin saja tidak ada.
Inilah mengapa masuk akal untuk MERGE
mendukung pola dengan satu istilah.
Misalnya, alih-alih ini (yang sebenarnya bukan Cypher legal):
MERGE
(a:Foo {id: 'a'})-[:BAR]->(b:Foo {id: 'b'})<-[:BAR]-(c:Foo {id: 'c'}),
(b)-[:BAR]->(d:Foo {id: 'd'})
RETURN a
Anda sebenarnya harus melakukan ini:
MERGE (a:Foo {id: 'a'})
MERGE (b:Foo {id: 'b'})
MERGE (c:Foo {id: 'c'})
MERGE (d:Foo {id: 'd'})
MERGE (a)-[:BAR]->(b)
MERGE (b)<-[:BAR]-(c)
MERGE (b)-[:BAR]->(d)
RETURN a