Graphes – Clauses et fonctions¶
Clauses et fonctions dans Neo4j¶
- Clauses (en majuscules):
MATCH,WHERE,ORDER BY,SKIP,LIMIT,UNWIND
- Fonctions (en minuscules):
- Regroupement :
- Somme, moyenne, min, max, dénombrement
- Mathématiques :
- Arrondissement, valeurs planchers, plafond
- Prédicats (retournent vrai ou faux) :
all,any,exists,none,single
- Temporelles :
- manipulation des dates et heures
- Spatiales :
distance,point
- Regroupement :
MATCH¶
- Clause de base permettant de définir le modèle (« pattern ») recherché.
-
Syntaxe :
- Tous les nœuds :
MATCH (n) RETURN n - Nœuds avec un type/étiquette :
MATCH (movie:Movie) RETURN movie.title -
Nœuds interreliés :
-
Définir le sens de la relation (
-->ou<--) : -
Réutiliser la relation de la requête :
-
Préciser la nature (le type) de la relation entre les nœuds recherchés :
ou :
- Tous les nœuds :
-
Souvent utilisée en combinaison avec la clause
WHEREqui permet d’ajouter des restrictions aux valeurs recherchées. -
Documentation : https://neo4j.com/docs/cypher-manual/current/clauses/match/
-
Cette clause suivie de
CREATEpermet de créer des relations:
MATCH (p1:Person {name: 'Charlie Sheen'}), (p2:Person {name: 'Rob Reiner'})
CREATE (p1)-[:TYPE]->(p2)
- Relations multiples:
MATCH (charlie {name: 'Charlie Sheen'})-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
RETURN movie.title, director.name
- Définition du nombre de bonds :
- Chemin le plus court (shortest path) :
MATCH (p1:Person {name: 'Charlie Sheen'}), (p2:Person {name: 'Martin Sheen'}), p = shortestPath((p1)-[*]-(p2))
RETURN p
WHERE¶
- La clause
WHEREpermet de définir des contraintes additionnelles sur des éléments recherchés - https://neo4j.com/docs/cypher-manual/current/clauses/where/
- Peut être utilisé avec les mots-clés
AND,OR,XORouNOT - Fréquemment utilisée pour filtrer les nœuds ou les relations en fonction de leurs propriétés
- Permet aussi de filtrer sur l’existence (ou la non-existence) d’une propriété sur un nœud ou une relation.
- Permet l’utilisation d’expressions régulières
ORDER BY¶
- Permet de trier les données retournées
- Exemples :
SKIP¶
- Permet de définir à partir de quel élément retourner les résultats
- Exemple :
LIMIT¶
- Permet de limiter le nombre de résultats retournés par la requête
- Exemple :
UNWIND¶
- Permet d’étendre une liste en séquence d’enregistrements
Résultat :
| v | |
|---|---|
| 1 | "a" |
| 2 | "b" |
| 3 | "c" |
Fonctions de regroupement¶
- Les fonctions de regroupement (agrégation) permettent une analyse statistique de l’information contenue dans une base de données
| Fonction | Cypher |
|---|---|
| Moyenne | avg() |
| Dénombrement | count() |
| Somme | sum() |
| Minimum | min() |
| Maximum | max() |
| Écart type | stDev() |
- Exemples :
Une expression qui utilise des fonctions de regroupement est appelée une expression de regroupement (ou d'agrégation).
Clé de regroupement¶
-
Si une requête Cypher combine des expressions de regroupement avec des expressions qui ne le sont pas, ces dernières sont considérées comme des clés de regroupement.
-
https://neo4j.com/docs/cypher-manual/current/functions/aggregating/#grouping-keys
Exemples :
// Nb films par année
MATCH (n:Movie)
RETURN n.released, count(*);
// Évaluation moyenne par critique
MATCH (p:Person)-[r:REVIEWED]->(:Movie)
RETURN p.name, avg(r.rating)
Fonctions mathématiques¶
- Les fonctions mathématiques standard disponibles :
- https://neo4j.com/docs/cypher-manual/current/functions/mathematical-numeric/
rand()ceil()floor()round()abs()sign()
- Les fonctions logarithmiques et trigonométriques sont aussi disponibles:
Fonctions prédicats¶
- Les prédicats sont des fonctions qui retournent vrai ou faux (fonctions booléennes)
- Les prédicats servent à filtrer les requêtes ou comme expression dans les
RETURN - https://neo4j.com/docs/cypher-manual/current/functions/predicate/
- Les prédicats servent à filtrer les requêtes ou comme expression dans les
none()any()all()
exists()– existence d’une relation
- Utilisez
IS NOT NULLpour tester l’existence d’une propriété isEmpty()– Tableau et chaine de caractères
Fonctions temporelles¶
date() – date calendrier¶
date("2025-02-18")(format ISO 8601)date({year: 2025, month: 2, day: 18})
- https://neo4j.com/docs/cypher-manual/current/values-and-types/temporal/
date()sans arguments retourne la date courante selon le fuseau horaire configuré pour le serveur- UTC dans le conteneur neo4j de devilbox
datetime() – moment¶
datetime("2026-03-17T10:42:14")(format ISO 8601)datetime()sans argument retourne la date courante selon le fuseau horaire configuré pour le serveur- Le fuseau horaire fait partie du
datetime(), contrairement audate()- Pour cette raison, pour s’assurer la gestion correcte sur plusieurs fuseaux horaires,
datetime()est habituellement utilisé dans les bases de données en production même si seulement la partie calendrier est utilisée.
- Pour cette raison, pour s’assurer la gestion correcte sur plusieurs fuseaux horaires,
duration() – durée dans le temps¶
duration({days: 10, hours:12})duration("P10DT12H")(ISO 8601 duration format)- https://neo4j.com/docs/cypher-manual/current/functions/temporal/duration/
Fonctions spatiales¶
- Primitive
POINT- 2D ou 3D
- Cartésien (x,y,z) ou coordonnées géographiques (latitude, longitude, élévation - WGS84)
point({x:3.5, y:7.6, z:-8.4})point({longitude: 56.7, latitude: 12.78})
- Fonction
point.distance()
Exercice, partie 1¶
- Utilisez le projet « Contact Tracing » disponible sur https://sandbox.neo4j.com/ (plus bas dans la page)
- OU recréez la base de données à partir des commandes cypher ici:
- Copiez-collez le contenu du fichier cypher dans Neo4j Desktop ou exécutez-le dans VS Code
-
Il y a 5615 personnes dans le graphe
-
Trouvez les requêtes permettant de trouver les résultats aux questions suivantes :
- Liste des personnes recensées par l’étude
- Nombre de personnes recensées
- Liste des personnes malades
- Nombre de personnes regroupées selon le statut de santé
- Liste des endroits visités par Rachel Valentine
- Nombre de visites effectuées par Rachel Valentine
Exercice, partie 2¶
- Toujours avec le projet « Contact Tracing », trouvez les requêtes permettant de trouver les résultats aux questions suivantes :
- Liste des personnes ayant visité un endroit en commun avec Rachel Valentine
- Liste des personnes ayant visité un endroit en commun avec Rachel Valentine, triées en ordre alphabétique. Ne retourner que le nom, et le statut de santé des personnes.
- Affichez les 50 premiers résultats de la requête précédente
- Affichez les 50 résultats suivants (51 à 100)
- Liste des visites ayant eu lieu (date de début) en mai 2020
- Durée moyenne des visites par endroit
- Terminé?
- Étudiez les requêtes proposées dans le guide du projet
Ligne de commande :