Aller au contenu

Graphes – CRUD

Cypher – Ajout

  • La clause CREATE permet d’ajouter des nœuds ainsi que des relations : https://neo4j.com/docs/cypher-manual/current/clauses/create
  • Syntaxe :

    • Nœud simple : CREATE ()
    • Nœuds multiples : CREATE (), ()
    • Nœud avec un type (label) : CREATE (n:Person)
    • Nœud avec plusieurs types (labels) : CREATE (n:Person:Swedish)
    • Nœud avec type et propriétés :

      CREATE (n:Person {name: 'Andy', title: 'Developer'})
      
    • Modèle (pattern) complet :

      CREATE (:Person {name:'Andy'})-[:WORKS_AT]->(:Company {name: 'Neo4j'})
      
  • La relation peut aussi être créée à partir de la recherche de nœud(s) existant(s) :

    MATCH (a:Person), (b:Person)
    WHERE a.name = 'A' AND b.name = 'B'
    CREATE (a)-[:RELTYPE]->(b)
    
  • Relation avec propriétés :

    MATCH (…)
    CREATE (a)-[:RELTYPE {propriete:valeur}]->(b)
    
  • Si un nœud avec les mêmes caractéristiques existe déjà (même type, mêmes valeurs de propriétés), CREATE va créer une copie du nœud.

  • Si on cherche à éviter la duplication, la clause MERGE va auparavant valider la présence d’un nœud existant avant d’en créer un nouveau.

    MERGE (:Person {name:'Andy'})
    
    • Souvent utilisé dans les scripts d’importation

Cypher – Édition

Syntaxe :

MATCH (n …)
SET n.<propriete> = <valeur>  // ou n:Type
// optionnellement
RETURN n

Exemples :

MATCH (n {name: 'Andy'})
SET n.surname = 'Taylor'
MATCH (n {name: 'Andy'})
SET (CASE WHEN n.age = 36 THEN n END).worksIn = 'Malmo'
MATCH (n {name: 'Andy'})
SET n.age = toString(n.age)
MATCH (n {codename: '007'})
SET n.codename = null

Efface toutes les propriétés :

MATCH (p {name: 'Peter'})
SET p = {}

Ajoute ou modifie des propriétés :

MATCH (p {name: 'Peter'})
SET p += {age: 38, hungry: true, position: 'Entrepreneur'}

Remplace toutes les propriétés (pas de changement de type) :

MATCH (at {name: 'Andy'}), (pn {name: 'Peter'})
SET at = pn

Remplace toutes les propriétés par les nouvelles :

MATCH (p {name: 'Peter'})
SET p = {name: 'Peter Smith', position: 'Entrepreneur'}

Modifie plusieurs propriétés :

MATCH (n {name: 'Andy'})
SET n.position = 'Developer', n.surname = 'Taylor'

Changement de type :

MATCH (n {name: 'Stefan'})
SET n:German

Cypher – Suppression

  • La clause DELETE permet de supprimer un nœud ou une relation : https://neo4j.com/docs/cypher-manual/current/clauses/delete/
    • Toute relation vers un nœud doit être effacée auparavant
  • La clause DETACH DELETE permet de supprimer un nœud et les relations auxquelles il est associé
  • Elle est généralement jumelée avec l’utilisation de la clause MATCH

Syntaxe :

MATCH (…) DELETE elementASupprimer

Exemples :

MATCH (n {name: 'Andy'})
DETACH DELETE n

Toute relation vers le nœud n doit être effacée auparavant :

MATCH (n:Person {name: 'UNKNOWN'})
DELETE n
MATCH (n {name: 'Andy'})-[r:KNOWS]->()
DELETE r

Exercice – Requêtes d’ajout

Utilisez la base de données du tutoriel neo4j sur les films (Movie Graph).

Attention

Exécutez les requêtes en ordre et assurez-vous de les prendre en note dans un fichier .cypher.

  1. Ajoutez 3 films de votre choix (titre et tagline) en vous assurant qu’ils ne sont pas déjà présents dans la base de données
  2. Pour chacun des films, ajoutez ensuite 2 acteurs qui ne sont pas déjà présents dans la base de données
  3. Pour chacun des films, ajoutez ensuite les réalisateurs ([:DIRECTED]), à moins qu’ils ne soient déjà présents dans la base de données
  4. Ajoutez ensuite les relations entre les films, les acteurs et les réalisateurs
  5. Ajoutez 2 autres films, acteurs (1 par film) et réalisateurs en utilisant une seule requête de création par film.
  6. Effectuez les requêtes nécessaires pour valider vos requêtes d’ajout

Exercice – Requêtes d’édition

  1. Ajoutez la durée (en minutes) sur 2 de vos films
  2. Ajoutez la durée (en minutes) et l’année de réalisation sur 2 autres films
  3. Ajoutez les rôles joués par les acteurs (dans la relation ACTED_IN) d’un de vos films
  4. Modifiez l’année de réalisation d’un film de votre choix

Exercice – Requêtes de suppression

  1. Supprimez un film de votre choix. Les relations associées à ce film doivent être effacées auparavant ou Neo4j va refuser la requête
  2. Supprimez un film de votre choix en supprimant du même coup ses relations.
  3. Supprimez la relation entre un acteur et un film de votre choix