OrientDB: Trouver tous les sommets qui n'ont pas de sommet voisin direct d'une classe donnée
-
28-10-2019 - |
Question
En utilisant le langage de requête d'OrientDB, comment trouver tous les sommets du cluster a
qui n'ont pas d'arête sortante se terminant par un sommet de la classe b
(c'est-à-dire pas de sommet voisin direct de la classe b
)?
Peu importe s'ils ont d'autres bords sortants.
La solution
Si vous avez une classe A mappée sur le cluster a, vous pouvez faire:
select from A where not( out.in.@class in ['b'] )
Cela signifie barrer la propriété "out" des enregistrements A (en tant qu'arêtes), puis la propriété "in" (le sommet) et obtenir le nom de la classe (@class).J'ai utilisé l'opérateur IN au lieu de= (equals) car "out.in. @ class" renvoie une collection de noms de classes.
Si vous ne voulez pas de classe A et que vous devez passer par le cluster A, utilisez cluster: syntax:
select from cluster:A where not( out.in.@class in ['b'] )
J'ai testé contre le dernier 1.0rc8-SNAPSHOT et fonctionne.