Operadores y funciones
La superficie v0 cubre cada operador y función integrada listada en
RFC-004
más algunas adiciones de releases posteriores (vector(),
shortestPath, allShortestPaths).
Operadores
Aritméticos
+, -, *, /, % (módulo), ^ (potencia).
RETURN 2 + 3 AS a, 10 % 3 AS b, 2 ^ 10 AS cString
+concatena strings.=~es el operador de match de regex (estilo PCRE).
RETURN p.first_name + ' ' + p.last_name AS full_nameMATCH (p:Person) WHERE p.email =~ '.+@example\\.com$' RETURN pBooleanos
AND, OR, NOT, XOR. Lógica de tres valores — consulta Subset
soportado § Semántica de NULL.
Comparación
=, <>, <, <=, >, >=. La igualdad y el orden siguen las
reglas de Cypher; = entre NULL y cualquier cosa devuelve NULL,
no false.
Tests de null
IS NULL, IS NOT NULL.
MATCH (p:Person)WHERE p.country IS NOT NULLRETURN p.name, p.countryMembership y predicados de string
x IN [...]— membership en lista.s STARTS WITH 'A',s ENDS WITH '!',s CONTAINS 'lic'— predicados de string.
MATCH (p:Person)WHERE p.country IN ['US', 'CA', 'MX'] AND p.name STARTS WITH 'A'RETURN pCASE
Las formas simple y multi-branch parsean ambas.
RETURN CASE WHEN p.age < 18 THEN 'menor' WHEN p.age < 65 THEN 'adulto' ELSE 'mayor'END AS bracketList y pattern comprehension
RETURN [x IN $values WHERE x > 0 | x * 2] AS doubled_positivesMATCH (p:Person)RETURN p.name, [(p)-[:KNOWS]->(f) | f.name] AS friend_namesFunciones integradas
Agregaciones
| Función | Descripción |
|---|---|
count(*) | Conteo de filas. |
count(x) | Conteo no-null de x. |
count(DISTINCT x) | Conteo distinto no-null. |
sum(x) | Suma. |
avg(x) | Media aritmética. |
min(x) / max(x) | Mínimo / máximo. |
collect(x) | Acumula filas en una lista. |
collect(DISTINCT x) | Igual, deduplicado. |
Escalares
| Función | Descripción |
|---|---|
id(n) | NodeId interno de un nodo, o el id de la arista. |
labels(n) | Lista de strings de label en un nodo. |
type(r) | El string del edge_type de una relación. |
keys(n) | Lista de nombres de property declarados en un nodo / rel. |
properties(n) | Map de properties de un nodo / rel como MAP<STRING, T>. |
length(p) | Número de hops en un PATH. |
size(coll) | Longitud de una lista, map o string. |
head(coll) | Primer elemento de una lista. |
last(coll) | Último elemento de una lista. |
tail(coll) | La lista sin su primer elemento. |
coalesce(x, …) | Primer argumento no-null, o NULL si todos son null. |
String
toLower(s), toUpper(s), trim(s), substring(s, start[, length]),
replace(s, find, repl), split(s, sep), toString(x),
toInteger(x), toFloat(x).
RETURN toLower(trim(p.email)) AS normalizedNuméricas
abs(x), ceil(x), floor(x), round(x), rand(), sign(x).
Temporales (solo constructores)
date(iso), datetime(iso), duration(iso). El constructor acepta
strings ISO-8601; el álgebra temporal completa queda fuera de scope
en v0.
WITH datetime('2026-01-15T12:00:00Z') AS cutoffMATCH (m:Message)WHERE m.created_at >= cutoffRETURN mDe patrón
| Función | Descripción |
|---|---|
exists(pattern) | True si existe al menos un binding del patrón. |
nodes(path) | Nodos a lo largo de un PATH (posiciones alternadas 0, 2, 4, …). |
relationships(path) | Relaciones a lo largo de un PATH (posiciones 1, 3, 5, …). |
Las subqueries EXISTS { ... } están documentadas en Leer
datos.
Constructores de path
shortestPath((a)-[*..N]-(b)) y allShortestPaths((a)-[*..N]-(b))
(RFC-023, [Unreleased]). El path binding es obligatorio y ambos
endpoints deben estar bindeados en el scope. Un solo hop de relación
en el patrón interno.
MATCH p = shortestPath((a:Person {name: 'Alice'})-[:KNOWS*..6]-(b:Person {name: 'Bob'}))RETURN p, length(p) AS hopsvector() (desde 0.4.1)
Levanta una lista numérica homogénea (literal o parámetro) a un
VECTOR(Vec<f32>) de primera clase. Los enteros se coercionan a
f32. Argumentos no numéricos o no-lista lanzan un EvalError
tipado que nombra el índice ofensor.
CREATE (d:Doc {id: $id, embedding: vector($values)})Los literales de lista pelados (e.g. embedding: [0.1, 0.2]) todavía
fallan con only scalars are storable in v0; vector() es el opt-in
explícito para almacenamiento.
Siguientes pasos
- Leer datos — donde realmente usas estos operadores y funciones.
- Escribir datos — la contraparte de escritura.
- Subset soportado — la porción exacta de openCypher / GQL que acepta el parser.