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.