Virgole nella clausola MERGE come ci sono nella clausola MATCH?
Quanto segue funziona bene in neo4j 4:
MATCH (a)-->(b)<--(c), (b)-->(d)
RETURN a
Ma quanto segue restituisce un errore:
MERGE (a)-->(b)<--(c), (b)-->(d)
RETURN a
Testo errore: 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)"
^
Se ho capito bene, l'unione fornisce un livello di funzionalità di upsert. Ma l'unione è più limitata nella capacità di corrispondenza rispetto alla corrispondenza? Come si uniscono modelli non lineari complessi che richiedono separazioni virgole ?
Risposte
L' intero MERGE
modello verrà creato se un elemento nel modello non esiste ancora. Quindi, per essere sicuro, devi sempre assicurarti che ogni MERGE
modello abbia un solo elemento che potrebbe non esistere.
Questo è il motivo per cui ha senso MERGE
supportare modelli con un solo termine.
Ad esempio, invece di questo (che comunque non è legale Cypher):
MERGE
(a:Foo {id: 'a'})-[:BAR]->(b:Foo {id: 'b'})<-[:BAR]-(c:Foo {id: 'c'}),
(b)-[:BAR]->(d:Foo {id: 'd'})
RETURN a
dovresti effettivamente farlo:
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