Vue d'ensemble
Alias est utilisé pour nommer les données générées pendant l'exécution de UQL, ce qui permet de les utiliser ou de les retourner ultérieurement.
Alias
Alias personnalisé
Définir un alias personnalisé
Un alias personnalisé est défini en utilisant le mot-clé as
. Notez les points suivants :
- L'alias doit être défini dans la clause où les données sont générées.
- Un alias peut être renommé, mais seul le dernier défini est valide.
- Un nom d'alias ne peut être utilisé qu'une seule fois dans une instruction UQL, même s'il est obsolète en raison du renommage de l'alias.
En UQL, si des données récupérées ne sont jamais utilisées sans définir d'alias, ou si un alias est défini mais jamais utilisé ou retourné, les deux cas peuvent avoir un effet négatif sur la validité de UQL.
Conventions de nommage
Le nom d'un alias personnalisé doit :
- contenir entre 1 et 64 caractères;
- ne pas commencer par le symbole tilde (~);
- ne pas contenir de backquotes (`);
- ne pas utiliser de mots réservés par le système.
Quand un alias contient des caractères autres que des lettres, des chiffres et des tirets bas, il doit être entouré de paires de backquotes (`) lorsqu'il est utilisé dans UQL. Voici un exemple :
find().nodes() as `my-Nodes`
return `my-Nodes`
Il est suggéré de ne pas utiliser le nom d'une propriété comme alias. Si nécessaire, utilisez l'alias système this pour lever les ambiguïtés lorsque requis.
Alias système
Il existe trois alias système dans UQL :
Alias Système |
Où Utilisé | Données Représentées |
---|---|---|
this |
Tout filtre de node ou edge | Node ou edge actuel |
prev_n |
Filtre dans le modèle de node ou d'edge | Node précédent du node ou edge actuel |
prev_e |
Filtre dans le modèle de node ou d'edge | Edge précédent du node ou edge actuel |
this
Dans le filtre de node ou d'edge, vous pouvez généralement omettre l'utilisation de this
, qui représente le node ou edge actuel. Par exemple, le filtre de node {balance > 5000}
dans le UQL suivant est en réalité équivalent à {this.balance > 5000}
.
find().nodes({balance > 5000}) as n
return n
Cependant, this
ne peut être omis en cas d'ambiguïté. Cela se produit lorsqu'un alias personnalisé et une propriété portent le même nom. Dans l'exemple ci-dessous, balance est le nom à la fois de l'alias et d'une propriété de node. Utiliser this
dans le filtre indique clairement que balance se réfère à la propriété de node. Si {balance > 5000}
est écrit dans ce cas, l'alias balance est utilisé à la place.
... as balance
find().nodes({this.balance > 5000})
...
prev_n
prev_n
est exclusivement applicable dans un modèle de node ou d'edge, se référant au node le plus proche à gauche du node ou edge actuel dans le path.
- Utilisation dans le modèle de node ou d'edge unique :
Lors de l'utilisation de
prev_n
dans le premiern()
du modèle de path, le node référencé parprev_n
n'existe pas physiquement. Par conséquent, toute comparaison impliquantprev_n
avec les opérateurs==
,!=
,>
,>=
,<
et<=
renvoie TRUE. Le résultat des autres opérateurs est imprévisible.
- Utilisation dans le modèle multi-edge :
Il est important de souligner que tous les nodes référencés par prev_n
doivent posséder la propriété mentionnée par prev_n
. Considérons l'exemple ci-dessous qui recherche les paths "@actor - [@actsIn] - @movie" et match les noeuds de film dont la notation doit être supérieure à celle du noeud d'acteur. Si @actor manque de la propriété de notation, la requête ne donnera aucun résultat.
n({@actor}).e({@actsIn}).n({@movie.rating > prev_n.rating})
return p{*}
prev_e
prev_e
est exclusivement applicable dans un modèle de node ou d'edge, se référant à l'edge le plus proche à gauche du node ou edge actuel dans le path.
- Utilisation dans le modèle de node ou d'edge unique :
- Utilisation dans le modèle multi-edge :
Lors de l'utilisation de
prev_e
dans le premiern()
,e()
oue()[<>]
du modèle de path, le (premier) edge référencé parprev_e
n'existe pas physiquement. Par conséquent, toute comparaison impliquantprev_e
avec les opérateurs==
,!=
,>
,>=
,<
et<=
renvoie true. Le résultat des autres opérateurs est imprévisible.
Il est important de souligner que tous les edges référencés par prev_e
doivent posséder la propriété mentionnée par prev_e
. Considérons l'exemple ci-dessous qui recherche les paths "holder - [@holds] - @card - [@transfersTo] - @card - [@transfersTo] - @card - [@holds] - holder" et s'assure que le temps de transaction est ascendant. Cependant, le prev_e
implique également le premier edge @holds, si @holds manque de la propriété temps, la requête ne donnera aucun résultat.
n({@user} as holder)
.e({@holds}).n({@card})
.e({@transfersTo.time > prev_e.time})[:2]
.n({@card}).e({@holds})
.n(holder) as p
return p{*}
Alias par défaut
Dans UQL, deux alias par défaut sont prédéfinis :
Alias par défaut |
Où Appliqué | Données Représentées |
---|---|---|
nodes |
Clause find().nodes() |
Nodes récupérés |
edges |
Clause find().edges() |
Edges récupérés |
Vous pouvez utiliser ces alias par défaut directement sans les définir :
find().nodes({@account})
return nodes{*}
Cependant, l'alias par défaut devient invalide lorsqu'un alias personnalisé est défini à la place.
Alias de Clause et Alias de Méthode
Dans certaines clauses UQL, vous pouvez définir un alias pour l'ensemble de la clause (appelé alias de clause), et pour des méthodes spécifiques (appelé alias de méthode). Veuillez vous référer à la syntaxe de chaque clause pour plus de détails.
Exemple : Définir un alias pour la clause find().edges()
find().edges({@direct}) as e
return e
Il n'est pas permis de définir un alias pour les méthodes find()
ou edges()
séparément.
Exemple : Définir des alias pour la clause autonet().src().dest().depth()
et l'une de ses méthodes src()
autonet().src({age < 60} as startNodes).dest({@event}).depth(:3) as paths
return startNodes, paths
Exemple : Définir des alias pour la clause find().nodes()
et la clause WITH
:
find().nodes({@account}) as a
with min(a.age) as minAge
find().nodes({@account.age == minAge}) as b
return b.name
Type d'Alias
Le type d'un alias est déterminé par les données qu'il représente. Ci-dessous se trouve un exemple de définition et appel de plusieurs alias :
- L'alias users représente des nodes et est de type NODE.
- L'alias maxAge représente la valeur maximale de la property age, qui peut être de divers types numériques tels que int32 ou int64.
- L'alias signups représente des edges et est de type EDGE.
- L'alias p représente des paths et est de type PATH.
find().nodes({@user}) as users
with max(users.age) as maxAge
n({@user.age == maxAge}).e({@signsUp} as signups).n({@course}) as p
return signups, p
Appel d'Alias
Selon le type d'alias, vous pouvez soit appeler directement l'alias dans certaines clauses, soit extraire des données spécifiques de l'alias pour les utiliser.
Le tableau ci-dessous montre les appels d'exemple d'alias de différents types :
Note : nodes
, edges
, paths
, myLists
, myPoints
, myObjects
et myItems
sont des alias de type NODE, EDGE, PATH, liste, point, objet et autres respectivement.
Format d'Appel |
Données Représentées | Type de Données |
---|---|---|
nodes |
Nodes | NODE |
nodes.name |
Valeurs de la propriété name | Même que la propriété |
nodes.@ |
Schemas des nodes | string |
edges |
Edges | EDGE |
edges.time |
Valeurs de la propriété de edge time | Même que la propriété |
edges.@ |
Schemas des edges | string |
paths |
Paths | PATH |
myLists |
Listes | list |
myLists[2] |
Les 3èmes éléments dans les listes | Même que l'élément |
myLists[0:3] |
Sous-listes formées par les 1ers aux 4èmes éléments dans les listes | list |
myLists[:5] |
Sous-listes formées par les 1ers aux 6èmes éléments dans les listes | list |
myLists[2:] |
Sous-listes formées par les éléments à partir de l'indice 2 jusqu'à la fin dans les listes | list |
myPoints |
Points, chacun avec deux coordonnées | point |
myPoints.x |
Valeurs des coordonnées x | double |
myPoints.y |
Valeurs des coordonnées y | double |
myObjects.age |
Valeurs de la clé age | Identique à la clé |
myItems |
Valeurs | Identique à la valeur |
Alias de type TABLE ne peut pas être appelé dans UQL.
Plus de formats d'appel sont supportés dans la clause RETURN
. Veuillez cliquer ici pour plus d'informations.