Diferencia entre fusionar y crear único en Neo4j


Estoy tratando de averiguar cuál es la diferencia entre FUSIONAR y CREAR ÚNICO. Conozco estas características:

MERGE

Soy capaz de crear nodo, si no existe patrón.

    MERGE (n { name:"X" }) RETURN n;

Esto crea el nodo "n" con el nombre de la propiedad, el nodo vacío "m" y la relación RELACIONADA.

    MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;

CREAR ÚNICO

No puedo crear un nodo como este.

    CREATE UNIQUE (n { name:"X" }) RETURN n;

Si existe el nodo "n", crear único hace que el nodo vacío "m" y la relación ESTÉN RELACIONADOS.

    MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;

Si este patrón existe, nada creado, solo devuelve el patrón.

Desde mi punto de vista, veo MERGE y CREATE UNIQUE son las mismas consultas, pero con CREATE UNIQUE no puedes crear el nodo de inicio en relación. Estaría agradecido, si alguien pudiera explicar este problema y comparar estas consultas, thx.

Author: EdWood, 2014-04-01

1 answers

CREATE UNIQUE tiene una semántica ligeramente más oscura que MERGE. MERGE se desarrolló como una alternativa con un comportamiento más intuitivo que CREATE UNIQUE; en caso de duda, MERGE suele ser la elección correcta.

La forma más fácil de pensar en MERGE es como una COINCIDENCIA o creación. Es decir, si algo en la base de datos sería MATCH el patrón que está utilizando en MERGE, entonces MERGE simplemente devolverá ese patrón. Si nada coincide, el MERGE creará todos los elementos faltantes en el patrón, donde un elemento faltante significa cualquier identificador sin consolidar.

Dado

MATCH (a {uid:123})
MERGE (a)-[r:LIKES]->(b)-[:LIKES]->(c)

"a" es un identificador enlazado desde la perspectiva de la FUSIÓN. Esto significa que cypher de alguna manera ya sabe qué nodo representa.

Esta declaración puede tener dos resultados. O el patrón completo ya existe, y no se creará nada, o faltan partes del patrón, y se creará un conjunto completamente nuevo de relaciones y nodos que coincidan con el patrón.

Ejemplos

// 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]->()
 32
Author: Jacob Davis-Hansson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-24 00:46:46