Neo4j - Commande de fusion

La commande MERGE est une combinaison de la commande CREATE et de la commande MATCH.

La commande Neo4j CQL MERGE recherche un motif donné dans le graphe. S'il existe, il renvoie les résultats.

S'il n'existe PAS dans le graphique, il crée un nouveau nœud / relation et renvoie les résultats.

Dans ce chapitre, vous allez apprendre à -

  • Fusionner un nœud avec une étiquette
  • Fusionner un nœud avec des propriétés
  • OnCreate et OnMatch
  • Fusionner une relation

Syntaxe

Voici la syntaxe de la commande MERGE.

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

Avant de passer aux exemples de cette section, créez deux nœuds dans la base de données avec les étiquettes Dhawan et Ind. Créez une relation de type «BATSMAN_OF» de Dhawan à Ind comme indiqué ci-dessous.

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

Fusion d'un nœud avec une étiquette

Vous pouvez fusionner un nœud dans la base de données en fonction de l'étiquette à l'aide de la clause MERGE. Si vous essayez de fusionner un nœud basé sur l'étiquette, Neo4j vérifie s'il existe un nœud avec l'étiquette donnée. Sinon, le nœud actuel sera créé.

Syntaxe

Voici la syntaxe pour fusionner un nœud en fonction d'une étiquette.

MERGE (node:label) RETURN node

Exemple 1

Voici un exemple de requête de chiffrement qui fusionne un nœud dans Neo4j (basé sur l'étiquette). Lorsque vous exécutez cette requête, Neo4j vérifie s'il existe un nœud avec l'étiquetteplayer. Sinon, il crée un nœud nommé «Jadeja» et le renvoie.

S'il existe un nœud avec l'étiquette donnée, Neo4j les renvoie tous.

MERGE (Jadeja:player) RETURN Jadeja

Pour exécuter la requête ci-dessus, procédez comme suit -

Step 1- Ouvrez l'application de bureau Neo4j et démarrez le serveur Neo4j. Ouvrez l'application de navigateur intégrée de Neo4j à l'aide de l'URLhttp://localhost:7474/ comme indiqué dans la capture d'écran suivante.

Step 2 - Copiez et collez la requête souhaitée dans l'invite du dollar et appuyez sur le bouton de lecture (pour exécuter la requête) mis en évidence dans la capture d'écran suivante.

Résultat

Lors de l'exécution, vous obtiendrez le résultat suivant. Puisque vous avez déjà créé un nœud nommé «Dhawan» avec l'étiquette «player» dans la base de données, Neo4j le renvoie comme indiqué dans la capture d'écran suivante.

Exemple 2

Maintenant, essayez de fusionner un nœud nommé «CT2013» avec une étiquette nommée Tournament. Puisqu'il n'y a pas de nœuds avec cette étiquette, Neo4j crée un nœud avec le nom donné et le renvoie.

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

Pour exécuter la requête ci-dessus, procédez comme suit -

Step 1- Ouvrez l'application de bureau Neo4j et démarrez le serveur Neo4j. Ouvrez l'application de navigateur intégrée de Neo4j à l'aide de l'URLhttp://localhost:7474/ comme indiqué dans la capture d'écran suivante.

Step 2 - Copiez et collez la requête souhaitée dans l'invite du dollar et appuyez sur le bouton de lecture (pour exécuter la requête) mis en évidence dans la capture d'écran suivante.

Résultat

Lors de l'exécution, vous obtiendrez le résultat suivant. Comme discuté, car il n'y a pas de nœud avec l'étiquette donnée (Tournoi). Neo4j crée et renvoie le nœud spécifié comme indiqué dans la capture d'écran suivante.

Fusion d'un nœud avec des propriétés

Vous pouvez également fusionner un nœud avec un ensemble de propriétés. Si vous le faites, Neo4j recherche une correspondance égale pour le nœud spécifié, y compris les propriétés. S'il n'en trouve pas, il en crée un.

Syntaxe

Voici la syntaxe pour fusionner un nœud à l'aide des propriétés.

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

Exemple

Voici un exemple de requête de chiffrement pour fusionner un nœud à l'aide de propriétés. Cette requête tente de fusionner le nœud nommé «jadeja» en utilisant les propriétés et l'étiquette. Puisqu'il n'y a pas de tel nœud avec l'étiquette et les propriétés exactes, Neo4j en crée un.

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

Pour exécuter la requête ci-dessus, procédez comme suit -

Step 1- Ouvrez l'application de bureau Neo4j et démarrez le serveur Neo4j. Ouvrez l'application de navigateur intégrée de Neo4j à l'aide de l'URLhttp://localhost:7474/ comme indiqué dans la capture d'écran suivante.

Step 2 - Copiez et collez la requête souhaitée dans l'invite du dollar et appuyez sur le bouton de lecture (pour exécuter la requête) mis en évidence dans la capture d'écran suivante.

Résultat

Lors de l'exécution, vous obtiendrez le résultat suivant. Comme indiqué, puisqu'il n'y a aucun nœud avec l'étiquette et les propriétés spécifiées, il en crée un, comme illustré dans la capture d'écran suivante.

OnCreate et OnMatch

Chaque fois que nous exécutons une requête de fusion, un nœud est mis en correspondance ou créé. En utilisant on create et on match, vous pouvez définir des propriétés pour indiquer si le nœud est créé ou mis en correspondance.

Syntaxe

Voici la syntaxe de OnCreate et OnMatch clauses.

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

Exemple

Voici un exemple de requête de chiffrement qui montre l'utilisation de OnCreate et OnMatchclauses dans Neo4j. Si le nœud spécifié existe déjà dans la base de données, le nœud sera mis en correspondance et la propriété avec la paire clé-valeur isFound = "true" sera créée dans le nœud.

Si le nœud spécifié n'existe pas dans la base de données, alors le nœud sera créé et une propriété avec une paire clé-valeur isCreated = "true" sera créée.

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

Pour exécuter la requête ci-dessus, procédez comme suit -

Step 1- Ouvrez l'application de bureau Neo4j et démarrez le serveur Neo4j. Ouvrez l'application de navigateur intégrée de Neo4j à l'aide de l'URLhttp://localhost:7474/ comme indiqué dans la capture d'écran suivante.

Step 2 - Copiez et collez la requête souhaitée dans l'invite du dollar et appuyez sur le bouton de lecture (pour exécuter la requête) mis en évidence dans la capture d'écran suivante.

Résultat

Lors de l'exécution, vous obtiendrez le résultat suivant. Comme indiqué, comme il n'y a pas de nœud avec les détails spécifiés, Neo4j l'a créé avec la propriétéisFound comme indiqué dans la capture d'écran suivante.

Fusionner une relation

Tout comme les nœuds, vous pouvez également fusionner les relations à l'aide de la clause MERGE.

Exemple

Voici un exemple de requête de chiffrement qui fusionne une relation à l'aide de la clause MATCH dans Neo4j. Cette requête tente de fusionner une relation nomméeWINNERS_OF entre les nœuds «ind» (label: Pays & nom: Inde) et ICC13 (label: Tournoi & nom: ICC Champions Trophy 2013).

Puisqu'une telle relation n'existe pas, Neo4j en crée une.

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

Pour exécuter la requête ci-dessus, procédez comme suit -

Step 1- Ouvrez l'application de bureau Neo4j et démarrez le serveur Neo4j. Ouvrez l'application de navigateur intégrée de Neo4j à l'aide de l'URLhttp://localhost:7474/ comme indiqué dans la capture d'écran suivante.

Step 2 - Copiez et collez la requête souhaitée dans l'invite du dollar et appuyez sur le bouton de lecture (pour exécuter la requête) mis en évidence dans la capture d'écran suivante.

Résultat

Lors de l'exécution, vous obtiendrez le résultat suivant. Puisque la relation spécifiée n'existe pas dans la base de données, Neo4j en crée une comme indiqué dans la capture d'écran suivante.

De la même manière, vous pouvez également fusionner plusieurs relations et relations non dirigées.