Neo4j - Comando de fusão

O comando MERGE é uma combinação dos comandos CREATE e MATCH.

O comando Neo4j CQL MERGE procura um determinado padrão no gráfico. Se existir, ele retornará os resultados.

Se NÃO existir no gráfico, ele cria um novo nó / relacionamento e retorna os resultados.

Neste capítulo, você aprenderá como -

  • Mesclar um nó com rótulo
  • Mesclar um nó com propriedades
  • OnCreate e OnMatch
  • Unir um relacionamento

Sintaxe

A seguir está a sintaxe do comando MERGE.

MERGE (node: label {properties . . . . . . . })

Antes de prosseguir para os exemplos nesta seção, crie dois nós no banco de dados com os rótulos Dhawan e Ind. Crie um relacionamento do tipo “BATSMAN_OF” de Dhawan para Ind como mostrado abaixo.

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
CREATE (Ind:Country {name: "India"}) 
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind)

Mesclando um nó com um rótulo

Você pode mesclar um nó no banco de dados com base no rótulo usando a cláusula MERGE. Se você tentar mesclar um nó com base no rótulo, o Neo4j verifica se existe algum nó com o rótulo fornecido. Caso contrário, o nó atual será criado.

Sintaxe

A seguir está a sintaxe para mesclar um nó com base em um rótulo.

MERGE (node:label) RETURN node

Exemplo 1

A seguir está um exemplo de Cypher Query que mescla um nó no Neo4j (com base no rótulo). Quando você executa esta consulta, o Neo4j verifica se existe algum nó com o rótuloplayer. Caso contrário, ele cria um nó denominado “Jadeja” e o retorna.

Se existe algum nó com o rótulo fornecido, o Neo4j retorna todos eles.

MERGE (Jadeja:player) RETURN Jadeja

Para executar a consulta acima, siga as seguintes etapas -

Step 1- Abra o aplicativo de desktop Neo4j e inicie o servidor Neo4j. Abra o aplicativo de navegador integrado do Neo4j usando o URLhttp://localhost:7474/ como mostrado na imagem a seguir.

Step 2 - Copie e cole a consulta desejada no prompt de dólar e pressione o botão play (para executar a consulta) destacado na imagem a seguir.

Resultado

Ao executar, você obterá o seguinte resultado. Como você já criou um nó chamado “Dhawan” com o rótulo “jogador” no banco de dados, o Neo4j o retorna como mostrado na imagem a seguir.

Exemplo 2

Agora, tente mesclar um nó denominado “CT2013” ​​com um rótulo denominado Torneio. Como não há nós com este rótulo, o Neo4j cria um nó com o nome fornecido e o retorna.

MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) 
RETURN CT2013, labels(CT2013)

Para executar a consulta acima, siga as seguintes etapas -

Step 1- Abra o aplicativo de desktop Neo4j e inicie o servidor Neo4j. Abra o aplicativo de navegador integrado do Neo4j usando o URLhttp://localhost:7474/ como mostrado na imagem a seguir.

Step 2 - Copie e cole a consulta desejada no prompt de dólar e pressione o botão play (para executar a consulta) destacado na imagem a seguir.

Resultado

Ao executar, você obterá o seguinte resultado. Conforme discutido, uma vez que não há nenhum nó com o rótulo fornecido (Torneio). O Neo4j cria e retorna o nó especificado conforme mostrado na captura de tela a seguir.

Mesclando um Nó com Propriedades

Você também pode mesclar um nó com um conjunto de propriedades. Se você fizer isso, o Neo4j procura uma correspondência igual para o nó especificado, incluindo as propriedades. Se não encontrar nenhum, ele cria um.

Sintaxe

A seguir está a sintaxe para mesclar um nó usando propriedades.

MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . })

Exemplo

A seguir está um exemplo de consulta Cypher para mesclar um nó usando propriedades. Esta consulta tenta mesclar o nó denominado “jadeja” usando propriedades e rótulo. Como não existe tal nó com o rótulo e as propriedades exatas, o Neo4j cria um.

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
RETURN Jadeja

Para executar a consulta acima, siga as seguintes etapas -

Step 1- Abra o aplicativo de desktop Neo4j e inicie o servidor Neo4j. Abra o aplicativo de navegador integrado do Neo4j usando o URLhttp://localhost:7474/ como mostrado na imagem a seguir.

Step 2 - Copie e cole a consulta desejada no prompt de dólar e pressione o botão play (para executar a consulta) destacado na imagem a seguir.

Resultado

Ao executar, você obterá o seguinte resultado. Conforme discutido, uma vez que não há nós com o rótulo e as propriedades especificadas, ele cria um, conforme mostrado na captura de tela a seguir.

OnCreate e OnMatch

Sempre que executamos uma consulta de mesclagem, um nó é correspondido ou criado. Usando on create e on match, você pode definir propriedades para indicar se o nó é criado ou correspondido.

Sintaxe

A seguir está a sintaxe de OnCreate e OnMatch cláusulas.

MERGE (node:label {properties . . . . . . . . . . .}) 
ON CREATE SET property.isCreated ="true" 
ON MATCH SET property.isFound ="true"

Exemplo

A seguir está um exemplo de consulta Cypher que demonstra o uso de OnCreate e OnMatchcláusulas em Neo4j. Se o nó especificado já existir no banco de dados, o nó será correspondido e a propriedade com o par de valores-chave isFound = "true" será criada no nó.

Se o nó especificado não existir no banco de dados, o nó será criado e, dentro dele, uma propriedade com um par de valores-chave isCreated = "true" será criada.

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
ON CREATE SET Jadeja.isCreated = "true" 
ON MATCH SET Jadeja.isFound = "true" 
RETURN Jadeja

Para executar a consulta acima, siga as seguintes etapas -

Step 1- Abra o aplicativo de desktop Neo4j e inicie o servidor Neo4j. Abra o aplicativo de navegador integrado do Neo4j usando o URLhttp://localhost:7474/ como mostrado na imagem a seguir.

Step 2 - Copie e cole a consulta desejada no prompt de dólar e pressione o botão play (para executar a consulta) destacado na imagem a seguir.

Resultado

Ao executar, você obterá o seguinte resultado. Conforme discutido, uma vez que não há nenhum nó com os detalhes especificados, Neo4j o criou junto com a propriedadeisFound como mostrado na imagem a seguir.

Unir um relacionamento

Assim como os nós, você também pode mesclar os relacionamentos usando a cláusula MERGE.

Exemplo

A seguir está um exemplo de consulta Cypher que mescla um relacionamento usando a cláusula MATCH no Neo4j. Esta consulta tenta fundir um relacionamento chamadoWINNERS_OF entre os nós “ind” (etiqueta: País e nome: Índia) e ICC13 (etiqueta: Torneio e nome: Troféu dos Campeões ICC 2013).

Como essa relação não existe, Neo4j cria uma.

MATCH (a:Country), (b:Tournament) 
   WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013" 
   MERGE (a)-[r:WINNERS_OF]->(b) 
RETURN a, b

Para executar a consulta acima, siga as seguintes etapas -

Step 1- Abra o aplicativo de desktop Neo4j e inicie o servidor Neo4j. Abra o aplicativo de navegador integrado do Neo4j usando o URLhttp://localhost:7474/ como mostrado na imagem a seguir.

Step 2 - Copie e cole a consulta desejada no prompt de dólar e pressione o botão play (para executar a consulta) destacado na imagem a seguir.

Resultado

Ao executar, você obterá o seguinte resultado. Visto que a relação especificada não existe no banco de dados, o Neo4j cria uma conforme mostrado na imagem a seguir.

Da mesma forma, você pode mesclar vários relacionamentos e relacionamentos não direcionados.