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.
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]->()
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